Const char * vs const wchar_t *(连接)

时间:2011-04-05 13:42:30

标签: c++ string string-concatenation strcpy strcat

这是连接的最好方法吗?

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

它给出了错误。什么应该是正确的方法?

感谢。

2 个答案:

答案 0 :(得分:2)

我认为正确的方法是:

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

std::cout<<"Init() Failed "<<initError<<"\n";

答案 1 :(得分:1)

您最大的问题是您正在混合数据类型。使用char和相关函数或wchar及相关函数。如果需要混合它们,请使用转换功能。这比尝试将float传递给需要字符串的函数更有意义。 (编译器应该能够捕获这两个问题,因为wprintf的声明类似于int wprintf(const wchar_t *, ...)。)

另一个更小的问题是printf并且这不是打印常规字符串的正确函数,因为如果字符串中有任何百分号,则会得到未定义的行为。使用printf("%s",...)puts(...)或相关功能。

而且,既然这是C ++,那么使用std::string类会更好。它并不完美,但它远胜于C风格的琴弦。

另外,告诉我们错误是什么会有所帮助。您甚至没有告诉我们这是编译器错误还是运行时错误。