これはOSXで発生しますが、UNIX-yOSには当てはまると思います。私はこのように見える2つの文字列を持っています:
const wchar_t * test1 =(const wchar_t *) "\ x44 \ x00 \ x00 \ x00 \ x73 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00"; const wchar_t * test2 =(const wchar_t *) "\ x44 \ x00 \ x00 \ x00 \ x19 \ x20 \ x00 \ x00 \ x73 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00";
デバッガーでは、test1は「D」のように見え、test2は「D」のように見えます(カーリーアポストロフィ付き)。次に、このコードを呼び出します。
wchar_t buf1 [100]、buf2 [100]; int ret1 = swprintf(buf1、100、L "%ls"、test1); int ret2 = swprintf(buf2、100、L "%ls"、test2);
最初のswprintf呼び出しは正常に機能します。2番目のものは-1を返します(そしてバッファーは変更されません)。
問題はロケールに関係していると思いますが、グーグルで調べても何も役に立ちませんでした。これは、私が見ている問題を再現する最も簡単な方法です。私が本当に興味を持っているのはvswprintf()ですが、それは密接に関連していると思います。
swprintfが8ビット範囲外のUnicode文字でチョークするのはなぜですか?とにかくこれを回避する方法はありますか?