- ベストアンサー
fgets の失敗時、再読み込み開始位置は?
こんにちは。 fgets の失敗時、再読み込み開始位置はどこになるのでしょうか? 例えば、以下点線内のファイルを読み込み、bを読み込めずに失敗した場合 再度 fgets を発行(以下★)した場合、得られる文字列はどれでしょうか? (EOFまで読み込み NULL で返却されることは考えないとします) ----- a b c ----- if( fgets( line, 100, stream ) == NULL) fgets( line, 100, stream ) ★ 元々CStdioFile クラスの ReadString メソッドで CFileException がスローされた場合の再読み込み処理を 調べていたのですが、ReadString メソッド内部では fgets をコールしていたので質問させていただきました。 よろしくお願いします。 Windows XP VC++6.0
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ISO/IEC9899を見ると、「lineが不定なこと」は明記されていますが、 読み込み位置には言及されていない。 規格に定義がない⇒undefined behaviorでは。 # 特定処理系に付属の、特定処理系専用ライブラリが、 # 特定の処理系でしか保証されない内部コードを持っていても、 # 驚くには値しないと思います。 # (そうでもないと標準ライブラリからして実装できない)
その他の回答 (2)
- MrBan
- ベストアンサー率53% (331/615)
エラーフラグを落とすのは前提じゃないんですかね。 # VC7.1SP1のCStdioFile::ReadStringは例外を投げる前にclearerr読んでます。
- Werner
- ベストアンサー率53% (395/735)
http://msdn.microsoft.com/library/ja/vclib/html/_CRT_clearerr.asp MSDNのこの辺の記述を見た感じだと、 いったん読み込みに失敗したら、その後は何度やっても失敗するような気がする。