View Issue Details

Category
整備班:YAYA
SeverityminorReproducibilityalways 
Status closed 
Summary0000761: FREAD関数の返り値に関する問題。「読み込みエラー」と「ファイルの空行」が区別できない?
DescriptionFREAD関数では、戻り値が
・成功した場合、読み込んだ文字列
・ファイル終端に達した場合、-1
・失敗した場合、空文字列
となっていますが、EOFや読み込みエラーでファイルの読み込みをストップさせようとして

_line = FREAD(_filename);
if ((GETTYPE(_line) == 1 && _line == -1)||_line == '') {
    break;
}

と書いた場合、ファイルに空行がある場合でもこの条件式が成立し、「読み込みエラーが起きていないのに」ファイルの読み込みが終了してしまいます。
※GETTYPEで_lineの型をチェックしているのは、「-1しか書かれていない行」が読み込まれた場合への対策です。
 EOFで返ってくる「数値としての-1」と、ファイルから読み込んだ「文字列としての"-1"」をGETTYPEで区別しています。

もっとも、FREADで「読み込みエラーが発生したら読み取り中止」とする使い方はほとんどないでしょうから、事実上問題はないと思います。
とは言え、FREAD関数で、「読み込みエラーの空文字列」と「ファイルの空行」が区別できない可能性があることに気付いてしまいましたので、一応報告しておきます。
既に回避策があるようでしたら申し訳ありません。

Activities

ponapalt

2026-04-01 11:22

administrator   ~0001757

Tc573-3
FSTATUS

https://github.com/YAYA-shiori/yaya-shiori/releases

Issue History

Date Modified Username Field Change
2026-03-31 20:26 guest New Issue
2026-04-01 11:22 ponapalt Assigned To => ponapalt
2026-04-01 11:22 ponapalt Status new => closed
2026-04-01 11:22 ponapalt Resolution open => fixed
2026-04-01 11:22 ponapalt Note Added: 0001757