View Issue Details

Category
整備班:YAYA
SeverityminorReproducibilityalways 
Status new 
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

There are no notes attached to this issue.

Add Note

View Status
Note
Upload Files
Maximum size: 1,953 KiB

Attach files by dragging & dropping, selecting or pasting them.

送信ボタンを押す前に / Before pushing "Send" button

  • スパム避けのためにパスワードが必要です。送信ボタンを押すとユーザー名とパスワードを聞かれますので、それぞれ "bts" と入力してください。
  • To send report, please input "bts" into username and password box in popup dialog.

Issue History

Date Modified Username Field Change
2026-03-31 20:26 guest New Issue