2

次の行はどちらも「意図したとおりに機能します」:

wchar_t u[50], v[50];

swprintf(u, 50, L"%s", L"hello");
swprintf(v, 50, L"%ls", L"goodbye");

MessageBoxW(NULL, u, v, MB_OK);   // output: MessageBox showing "hello" and "goodbye"

狭い文字列を印刷する方法はありますか?また、そのドキュメントはどこにありますか? 例えば

swprintf(u, 50, L"%?", "hello");

C++ 標準は、(C 標準への参照により)wprintf関数のファミリで%schar(UTF-8 などのマルチバイト エンコーディングで)の文字列を指定し、.%lsの文字列を指定することを指定しますwchar_t

したがって、RTL (C++Builder で提供されるランタイム ライブラリの実装) は、ここでは明らかに標準に準拠していません。

背景: 私は実際に を使用しようとしていますUnicodeString::sprintfが、それは面倒な作業を に委任しvswprintfます。

4

2 に答える 2

2

これは実際には答えではありませんが、要素をまとめたものです。

参照 :

サイトhttp://www.cplusplus.com/は明確です:wprintfファミリの場合: ... すべてのフォーマット指定子は printf と同じ意味を持ちます。したがって、ワイド文字 (%c ではなく) を書き込むには %lc を使用し、ワイド文字列 (%s ではなく) には %ls を使用する必要があります。

実装:

gcc と clang はどちらも上記の仕様に準拠しています

%sMSVC および OP Borland C++ によると、ワイド文字列に準拠せず、受け入れません。

于 2015-01-13T12:31:01.053 に答える