printf を使用して 2 バイト文字列を 1 バイト文字列にフォーマットする場合:
printf("%ls\n", L"s:\\яшертыHello"); // %ls for a wide string (%s varies meaning depending on the project's unicode settings).
明らかに、一部の文字は ASCII 文字として表現できないため、2 バイト文字が「?」に変換される動作を見たことがあります。マークのキャラクター。ただし、これは特定のキャラクターに依存するようです。上記の printf の場合、出力は次のようになります。
s:\
私は次のようなものが得られることを望んでいました:
s:\??????Hello
残念ながら例を見失ってしまいましたが、1 つの文字列で Unicode 文字が検出されたときに、最初の文字列が「?」に置き換えられたと思います。そして、残りをあきらめました。
私の質問は、ワイド文字列をシングルバイト文字列にフォーマットするとどうなるかということです。ここのドキュメント: http://msdn.microsoft.com/en-us/library/hf4y5e3w.aspxは、「文字は最初の null 文字まで表示される」と述べています。しかし、私はそれを見ていません。これはprintfのバグですか、それとも私が見ている動作はどこかに文書化されていますか?
ご協力いただきありがとうございます。
アップデート
printfを使用する代わりの方法を教えてくれた人々からの回答に感謝します。別の方法に変更するつもりですが、好奇心から、なぜprintfの動作が信頼できる文書化されていないのかに非常に興味があります。それを実装した人が、これを機能させないようにするために道を踏み外したかのように見えます。