私は Excel プラグインを作成しており、Excel のwchar_t
出力を生成する必要があります (ただし、内部的には 100%であり、実際にはプレーン ASCII にchar制限されています)。charある時点で、私は
swprintf変換を行うために使用しています:
static wchar_t buffer[ 32369 ];
buffer[0] = swprintf( buffer + 1, sizeof(buffer) - 1, L"#%s!", message );
Excel はある種の CJK 文字を表示しますが、message
(type char const*) は印刷可能な ASCII (16 進値 0x20-0x7E) 以外の文字を含まない null で終了する文字列です。
私はこれを小さなテストプログラムで試し、生成された文字列を 16 進数でダンプしましたが、VC++ はmessage
それが であるかのように扱っているように見えます (ただし、1 バイトですが、正しくwchar_t const*認識されているようです)。'\0'これは、(私が期待してい
たものではなく)のwchar_tような値になります。0x65680x0068, 0x0065
C99 標準によれば、"%s"指定子
の場合、「関数 [...]
を繰り返し呼び出すかのようswprintfに」から文字を変換する必要があります。表示されている動作は Visual C++ ライブラリのエラーですか、それともグローバル ロケールに変更が必要なものがあるのでしょうか?char const*mbrtowc
(FWIW: g++ を使用して小さなテスト プログラムをコンパイルして実行すると、期待どおりの動作が得られます。ただし、G++ は Excel プラグインのオプションではありません。少なくとも現時点ではそうではありません。)