C++ 常量字符*与常量wchar\u t*(串联)

C++ 常量字符*与常量wchar\u t*(串联),c++,string,string-concatenation,strcpy,strcat,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); 它给出了错误。正确的方法应该是什么 谢谢。我认为正确的方法是: std::string msg = std::string("Init() Failed ") + initE

去康卡特最好的方法是什么

const char * s1= "\nInit() failed: ";
const char * s2 = "\n";
char buf[100];
strcpy(buf, s1);
strcat(buf, initError);
strcat(buf, s2);
wprintf(buf);
它给出了错误。正确的方法应该是什么


谢谢。

我认为正确的方法是:

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

std::cout您的最大问题是混合了数据类型。使用
char
和相关函数或
wchar
和相关函数。如果需要混合,请使用转换函数。这与尝试将浮点传递给需要字符串的函数没有多大意义。(编译器应该能够捕获这两个问题,因为
wprintf
的声明类似于
int-wprintf(const-wchar\u t*,…)

另一个更次要的问题是,
printf
等函数不是打印一般字符串的正确函数,因为如果字符串中有任何百分号,您将得到未定义的行为。使用
printf(“%s”,…)
put(…)
或相关函数

,由于这是C++,使用<>代码STD::String 类会更好。它并不完美,但比C风格的字符串要好得多


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

什么是initError?另外,如果处理char,则必须使用printf。initError的类型是wchar\u t吗?您是否在寻找
wcstombs
?如果使用printf和fprintf,initError的类型也是const char*。一切都好。但是如果我想使用wprintf和fwprintf,我该怎么办呢?如果你想使用
wprintf
等等,你可以使用宽字符,意思是
wchar\t
,而不是
char
和相应的函数。当给定不同的数据类型作为输入时,在某些数据类型上运行的函数将无法工作。@Azodious:如果要使用c函数,请使用
msg.c_str()
std::cout<<"Init() Failed "<<initError<<"\n";