fprintf不打印Unicode字符[关闭]
Posted
技术标签:
【中文标题】fprintf不打印Unicode字符[关闭]【英文标题】:fprintf not printing Unicode character [closed] 【发布时间】:2013-05-24 13:28:30 【问题描述】:今天早上我发现了一个非常奇怪的问题,我找不到解决方案。请帮我用下面的代码解决这个问题(使用 Visual Studio C++ 和 MFC):
FILE *fp = NULL;
//fp = fopen(mmFileName , "a");
//Store the module directory path
fopen_s( &fp , "TempWorking.xml" , "wb");
//char* TempChar;
CString strtempff;
strtempff = "\"<article> <section class="page"><p>Writing for the clown show that is <em>Forbes</em>, Darcy Travlos asks the <a href="http://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines">Betteridge’s Law</a>-challenging question “Apple And Google: The New ‘Old’ Reality?†(No link but tip o’ the an";
char* TempArray;
TempArray = new char[strtempff.GetLength()];
strcpy(TempArray,strtempff.GetString());
strtempff = "";
strtempff.Empty();
fprintf(fp,(char*)TempArray);
我不知道为什么我的代码在fprintf()
语句中不起作用:它给了我一个调试断言。 strtempff
收集自网络,只是代码中的一个例子。
【问题讨论】:
可能是怪怪的,没戴。 好吧好吧很奇怪,但它的问题 @R.MartinhoFernandes nop 它不适用于 TempArray[strtempff.GetLength()-1] = '\0'; 【参考方案1】:我相信您的错误是您向 fprintf 提供了一个不是格式字符串的字符串。你应该这样做:
fprintf(fp,"%s",(char*)TempArray);
解释一下,你的字符串中的任何 % 字符都会混淆它,因为它们是 printf 系列函数的特殊格式字符。其他关于缓冲区长度不足的 cmets 也是正确的,您也需要修复它。
您可能还想使用fwprintf
和宽字符串,因为您正在尝试打印扩展字符集。 http://www.cplusplus.com/reference/cwchar/fwprintf/
【讨论】:
TempArray
已经是char*
,不需要强制转换。
@RemyLebeau 也是如此。我只是简单地复制了他的代码,并进行了最少的必要更改。【参考方案2】:
CString::GetLength()
函数不包含 0 终止符,因此您声明的数组太小。
例如,如果CString
是“a”,那么GetLength()
将返回 1,并且您将分配 1 个字符的 TempArray
,但随后 strcpy()
将写入 2 个字符,因为它将 终止字符串,导致缓冲区溢出和未定义的行为。
【讨论】:
TempArray = new char[strtempff.GetLength()+2];也不行?? TempArray = new char[strtempff.GetLength()+10];也不行..以上是关于fprintf不打印Unicode字符[关闭]的主要内容,如果未能解决你的问题,请参考以下文章