- ベストアンサー
C言語でワイド文字の表示ができない問題に悩んでいます
- C言語で「ファイルから読み込んだワイド文字を表示できない」という初歩的な問題に悩んでいます。
- この問題に関して、問題の原因や解決策について詳しく教えていただきたいです。
- また、作成されたファイルのバイナリや実行結果も確認したいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
理由はわからんが %S.
その他の回答 (3)
- chie65536(@chie65535)
- ベストアンサー率44% (8802/19961)
忘れてたけど、printfも「wchar_t型の文字列を指定する場合は、%lsを使う」ので注意。 ::fwscanf(pFileIn, L"%s", szString); ::wprintf(L"[%s]\n", szString); の2行を ::fwscanf(pFileIn, L"%ls", szString); ::wprintf(L"[%ls]\n", szString); に直せばオッケーです。 printfの方が%sのままだったら、折角正しく読み込めても、charの文字列だと思われて、ちゃんと表示されません。
お礼
早速の回答有難うございます。 ご指摘通り、%s を %ls へ変更して実行しましたが、結果は以下の通り同じでした。 fffe [A] 私は、以下の様に表示されるのを期待しているのですが間違っているのでしょうか? fffe [ABC] 補足として、開発環境は以下の通りです。 Windows7/64bit - Visual Studio 2010 Professional.
- chie65536(@chie65535)
- ベストアンサー率44% (8802/19961)
行をコピペして書き直すの忘れた(本日2回目) 誤 char szWString[100]; 正 wchar_t szWString[100];
- chie65536(@chie65535)
- ベストアンサー率44% (8802/19961)
>wchar_t szString[100]; >::fwscanf(pFileIn, L"%s", szString); wscanfは、wchar_t型の文字配列に文字列を読み込む場合は、%sではなく%lsを使う。 char szCString[100]; char szWString[100]; :fwscanf(pFileIn, L"%s", szCString); :fwscanf(pFileIn, L"%ls", szWString); 上記のように、書式指定子にlがあるかないかで、格納先の配列の型が異なるので注意。
お礼
回答有難うございます。 早速、%S に変更し実行してみました。 いろいろ実行してみた結果、 【結果】 ::fwscanf(pFileIn, L"%s", szString); を ::fwscanf(pFileIn, L"%S", szString); に変更するのみで、[ABC]が正しく表示されました。 (wprintf()は変更せず、%sを指定) 有難うございました。 でも、なぜ fwscanf() だけ %S にする必要があるのか、疑問は残りますが。。