2016-02-23 2 views
-6

Мне нужен c-string формат toString(), но как его преобразовать? Вот функция:Как контрастировать? C-string формат toString()

string toString(){ 
    string tmp; 

    char buf[80]; 
    if (*d != 1) 
     sprintf_s(buf, "%d/%d", *n, *d); 
    else sprintf_s(buf, "%d", *n); 
    tmp = string(buf); 

    return tmp; 
} 
+2

Где 'n' и' d «Из чего? – ShadowRanger

+0

жаль не упоминать, private: int * n, * d. – user5966606

+0

Так что это метод какого-то существующего класса. Может помочь увидеть достаточно класса, чтобы понять структуру. Кроме того, сама цель немного неясна. Это функция, которую вы пытаетесь написать? Или вы пытаетесь написать отдельную функцию, которая возвращает строку C-стиля? Или используйте эту функцию, а затем конвертируйте в строку стиля C? – ShadowRanger

ответ

1

нужен формат с-строковое ToString()

Если вам просто нужно преобразовать вывод ToString(), вы можете использовать

const char* s = toString().c_str(); 

Ваша функция в настоящее время возвращает string (я предполагаю, что ваш код имеет using namespace std), что означает Объект строки C++.

Если вам не нужны строки C, я бы рекомендовал использовать строки C++, так как они более тесные и с ними просто легче работать. Однако, если по причинам, где-то в коде вы сделать нужна строка C, ваша функция должна выглядеть

char* toString() { 
    // formatting your output 
} 

Поскольку вся строка С является нулем ('\0') массив char, и массив эквивалентен указателю на первый элемент, так что это происходит от char*.

В любом случае строковые потоки C++ сделают форматирование вашего вывода более интуитивным. Вам понадобится #include <sstream>, а затем некоторые поисковые системы будут направлять вас в правильном направлении. Это решение также работает, если вам нужна строка C, потому что строки C++ есть метод, называемый c_str(), который преобразует строки C++ в строки C (нуль массива символов):

#include <string> 
#include <sstream> 
using namespace std; 

char* toString() { 
    stringstream ss; // these are so useful! 
    if (*d != 1) { 
     // this probably isn't the exact formatting you are looking for, 
     // but stringstreams can certainly do it if you research a bit! 
     ss << *n << *d; 
    } 
    else { 
     ss << *n; 
    } 
    string output = ss.str(); 
    return output.c_str(); 
} 
+1

Должно быть 'const char * s = toString(). C_str();' –

Смежные вопросы