- ベストアンサー
fgetsで値が取得できない
- fopen, fgets関数を使用してreadmeファイルをUTF-8で開こうとするとエラーメッセージが表示される
- UTF-8指定時には特殊な取り出し方が必要なのか疑問
- Visual C++ 2008 Express Editionのデバッグモードで実行している
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> ccs=UTF-8 を指定した場合、ワイド文字型配列にしか受け取れないらしいです。 つまり >char s[256]; >while (fgets(s, 256, file1) != NULL) ではダメで wchar_t s[256]; while (fgetws(s, 256, file1) != NULL) にしないといけない。 ちなみに --------------------------- Microsoft Visual C++ Debug Library --------------------------- Debug Assertion Failed! Program: C:\XXXX\test.exe File: f:\dd\vctools\crt_bld\self_x86\crt\src\fgets.c Line: 75 Expression: ( (_Stream->_flag & _IOSTRG) || ( fn = _fileno(_Stream), ( (_textmode_safe(fn) == __IOINFO_TM_ANSI) && !_tm_unicode_safe(fn)))) For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application) --------------------------- 中止(A) 再試行(R) 無視(I) --------------------------- というような警告メッセージが出るはずなので、そのまま貼り付けてもらうほうが 回答が付きやすいと思います。 メッセージボックス表示中に Ctrl + C で内容をコピーできますし。
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6289)
ccsとは何でしょうか。
補足
http://msdn.microsoft.com/ja-jp/library/yeby3zcb(VS.80).aspx fopen("newfile.txt", "rw, ccs=<encoding>"); といった感じで、encoding を指定してファイルを開く時に使用するようです。
お礼
ありがとうございます! やはりワイド文字列しか受け取れないのですね。 そうかもとは思っていましたが、これで確信が持てました。 警告メッセージは質問で書いたものしか出ませんでした。 エラーの見方が悪いだけかもしれませんが。。。 どの様なオペレーションで確認できますでしょうか?