我遇到了一个非常奇怪的问题...如果将以下琐碎的测试代码注入到单个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 应用程序的情况下它可以正常工作...
请帮忙!