次のコードを試しました:
wprintf(L"1 %s\n","some string"); //Good
wprintf(L"2 %s\n",L"some string"); //Not good -> print only first character of the string
printf("3 %s\n","some string"); //Good
//printf("4 %s\n",L"some string"); //Doesn't compile
printf("\n");
wprintf(L"1 %S\n","some string"); //Not good -> print some funny stuff
wprintf(L"2 %S\n",L"some string"); //Good
//printf("3 %S\n","some string"); //Doesn't compile
printf("4 %S\n",L"some string"); //Good
そして、次の出力が得られます。
1 some string
2 s
3 some string
1 g1 %s
2 some string
4 some string
したがって、 と の両方が char* と wchar* の両方を正しく出力できるように見えwprintf
ますprintf
が、正確な指定子が使用されている場合に限られます。間違った指定子を使用すると、コンパイル エラーが発生せず (警告もありません!)、間違った動作が発生する可能性があります。あなたは同じ行動を経験していますか?
注: これは Windows でテストされ、MinGW とg++ 4.7.2 でコンパイルされました (後で gcc を確認します) 。
編集: %ls も試しました (結果はコメントにあります)
printf("\n");
wprintf(L"1 %ls\n","some string"); //Not good -> print funny stuff
wprintf(L"2 %ls\n",L"some string"); //Good
// printf("3 %ls\n","some string"); //Doesn't compile
printf("4 %ls\n",L"some string"); //Good