非常に奇妙な問題が発生しています...次の簡単なテストコードは、単一のCocoaアプリケーションに挿入された場合は正常に機能しますが、フレームワークの1つで使用すると、まったく予期しない結果が得られます...
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アプリケーションのテストでは正常に機能します...
助けてください!