Const char * против const wchar_t * (конкатенация) - PullRequest
2 голосов
/ 05 апреля 2011

Какой лучший способ для конкатата?

const char * s1= "\nInit() failed: ";
const char * s2 = "\n";
char buf[100];
strcpy(buf, s1);
strcat(buf, initError);
strcat(buf, s2);
wprintf(buf);

Это дает ошибку.Какой должен быть правильный путь?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

Я думаю, что правильный путь:

std::string msg = std::string("Init() Failed ") + initError + "\n";
std::cout<<msg;

или

std::cout<<"Init() Failed "<<initError<<"\n";
1 голос
/ 05 апреля 2011

Ваша большая проблема в том, что вы смешиваете типы данных. Используйте либо char и связанные функции, либо wchar и связанные функции. Если вам нужно смешать их, используйте функцию преобразования. Это не имеет больше смысла, чем пытаться передать значение с плавающей точкой функции, нуждающейся в строке. (Компилятор должен быть в состоянии перехватить обе проблемы, поскольку объявление wprintf выглядит примерно так: int wprintf(const wchar_t *, ...).)

Другая, более незначительная проблема заключается в том, что printf и такие функции не подходят для вывода общих строк, поскольку, если в строках есть знаки процента, вы получите неопределенное поведение. Используйте printf("%s",...) или puts(...) или связанные функции.

И, поскольку это C ++, вам будет гораздо лучше использовать класс std::string. Это не идеально, но гораздо лучше, чем струны в стиле C.

Кроме того, нам поможет сообщение об ошибке. Вы даже не сказали нам, является ли это ошибкой компилятора или ошибкой во время выполнения.

...