C++ fprintf不打印Unicode字符

C++ fprintf不打印Unicode字符,c++,c,visual-c++,mfc,C++,C,Visual C++,Mfc,今天早上我发现了一个非常奇怪的问题,我找不到解决办法。请用下面的代码帮助我解决这个问题(使用VisualStudio C++和MFC): 我不知道为什么我的代码不能在fprintf()语句中工作:它给了我一个调试断言strtempff是从网络收集的,它只是代码中的一个示例。该函数不包含0-终止符,因此您声明的数组太小 例如,如果CString是“a”,那么GetLength()将返回1,并且您将分配一个TempArray为1个字符,但是strcpy()将写入2个字符,因为它将终止字符串,导致缓冲

今天早上我发现了一个非常奇怪的问题,我找不到解决办法。请用下面的代码帮助我解决这个问题(使用VisualStudio C++和MFC):

我不知道为什么我的代码不能在
fprintf()
语句中工作:它给了我一个调试断言
strtempff
是从网络收集的,它只是代码中的一个示例。

该函数不包含0-终止符,因此您声明的数组太小


例如,如果
CString
是“a”,那么
GetLength()
将返回1,并且您将分配一个
TempArray
为1个字符,但是
strcpy()
将写入2个字符,因为它将终止字符串,导致缓冲区溢出和未定义的行为。

我认为您的错误在于您向fprintf提供的字符串不是格式字符串。你应该做:

fprintf(fp,"%s",(char*)TempArray);
要解释一下,字符串中的任何%字符都会使它混淆,因为它们是printf函数系列的特殊格式字符。关于缓冲区长度不足的其他评论也是正确的,您也需要解决这个问题


您可能还希望使用
fwprintf
和宽字符串,因为您正在尝试打印扩展字符集

它可能很奇怪,没有磨损。好吧,好吧,很奇怪,但是problem@R.MartinhoFernandes不,它不适用于TempArray[strtempff.GetLength()-1]='\0';TempArray=newchar[strtempff.GetLength()+2];也不工作??TempArray=new char[strtempff.GetLength()+10];也不工作。
TempArray
已经是一个
char*
,不需要强制转换它。@RemyLebeau也是如此。我只是简单地复制了他的代码,只做了最少的必要更改。
fprintf(fp,"%s",(char*)TempArray);