私は 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
ような値になります。0x6568
0x0068, 0x0065
C99 標準によれば、"%s"
指定子
の場合、「関数 [...]
を繰り返し呼び出すかのようswprintf
に」から文字を変換する必要があります。表示されている動作は Visual C++ ライブラリのエラーですか、それともグローバル ロケールに変更が必要なものがあるのでしょうか?char const*
mbrtowc
(FWIW: g++ を使用して小さなテスト プログラムをコンパイルして実行すると、期待どおりの動作が得られます。ただし、G++ は Excel プラグインのオプションではありません。少なくとも現時点ではそうではありません。)