電子書籍の厳選無料作品が豊富!

こんにちは。

fgets の失敗時、再読み込み開始位置はどこになるのでしょうか?
例えば、以下点線内のファイルを読み込み、bを読み込めずに失敗した場合
再度 fgets を発行(以下★)した場合、得られる文字列はどれでしょうか?
(EOFまで読み込み NULL で返却されることは考えないとします)
-----



-----
if( fgets( line, 100, stream ) == NULL)
 fgets( line, 100, stream ) ★

元々CStdioFile クラスの ReadString メソッドで
CFileException がスローされた場合の再読み込み処理を
調べていたのですが、ReadString メソッド内部では
fgets をコールしていたので質問させていただきました。
よろしくお願いします。

Windows XP
VC++6.0

A 回答 (3件)

ISO/IEC9899を見ると、「lineが不定なこと」は明記されていますが、


読み込み位置には言及されていない。
規格に定義がない⇒undefined behaviorでは。

# 特定処理系に付属の、特定処理系専用ライブラリが、
# 特定の処理系でしか保証されない内部コードを持っていても、
# 驚くには値しないと思います。
# (そうでもないと標準ライブラリからして実装できない)
    • good
    • 0

エラーフラグを落とすのは前提じゃないんですかね。


# VC7.1SP1のCStdioFile::ReadStringは例外を投げる前にclearerr読んでます。
    • good
    • 0

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!