• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

ISO/IEC9899を見ると、「lineが不定なこと」は明記されていますが、 読み込み位置には言及されていない。 規格に定義がない⇒undefined behaviorでは。 # 特定処理系に付属の、特定処理系専用ライブラリが、 # 特定の処理系でしか保証されない内部コードを持っていても、 # 驚くには値しないと思います。 # (そうでもないと標準ライブラリからして実装できない)

その他の回答 (2)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.3

エラーフラグを落とすのは前提じゃないんですかね。 # VC7.1SP1のCStdioFile::ReadStringは例外を投げる前にclearerr読んでます。

  • Werner
  • ベストアンサー率53% (395/735)
回答No.2

http://msdn.microsoft.com/library/ja/vclib/html/_CRT_clearerr.asp MSDNのこの辺の記述を見た感じだと、 いったん読み込みに失敗したら、その後は何度やっても失敗するような気がする。

関連するQ&A