unicode和框架无法解决的问题
|
我遇到了一个非常奇怪的问题...以下简单的测试代码可以正常工作,如果将其注入到单个Cocoa应用程序中,但是当我在我的一个框架中使用它时,绝对会得到意想不到的结果...
wchar_t Buf[2048];
wcscpy(Buf, L\"/zbxbxklbvasyfiogkhgfdbxbx/bxkfiorjhsdfohdf/xbxasdoipppwejngfd/gjfdhjgfdfdjkg.sdfsdsrtlrt.ljlg/fghlfg\");
int len1 = wcslen(L\"/zbxbxklbvasyfiogkhgfdbxbx/bxkfiorjhsdfohdf/xbxasdoipppwejngfd/gjfdhjgfdfdjkg.sdfsdsrtlrt.ljlg/fghlfg\");
int len2 = wcslen(Buf);
char Buf2[2048];
Buf2[0]=0;
wcstombs(Buf2, Buf, 2048);
// ??? Buf2 == \"\"
// ??? len1 == len2 == 57, but should be 101
我生气了怎么可能?即使发生内存损坏,也可能无法损坏堆栈上分配的所有这些值...为什么连wcslen(L \“ MyWideString \”)也不起作用?更改测试字符串会更改其长度,但这始终是错误的,wcstombs返回-1 ...
setlocale()不会在任何地方使用,测试字符串仅包含ASCII字符,为了简化移植,我使用了-fshort-wchar编译器选项,但是在测试Cocoa应用程序的情况下效果很好。
请帮忙!
没有找到相关结果
已邀请:
3 个回复
雇砰
我也会得到意外的结果(在我的情况下为51,使用setlocale()之后的最终转换为251)。 因此,我查找了该选项的人条目: 警告:-fshort-wchar开关使GCC生成的代码与没有该开关的代码不二进制兼容。使用它来符合非默认应用程序二进制接口。 我认为这可以解释这一点:当您链接到标准库时,应该使用正确的ABI和类型约定,而该约定将被该选项覆盖。
导力疵谜
。
搂腹时