View Issue Details
| Category | |||||
|---|---|---|---|---|---|
| 整備班:YAYA | |||||
| Severity | minor | Reproducibility | always | ||
| Status | new | ||||
| Summary | 0000761: FREAD関数の返り値に関する問題。「読み込みエラー」と「ファイルの空行」が区別できない? | ||||
| Description | FREAD関数では、戻り値が ・成功した場合、読み込んだ文字列 ・ファイル終端に達した場合、-1 ・失敗した場合、空文字列 となっていますが、EOFや読み込みエラーでファイルの読み込みをストップさせようとして _line = FREAD(_filename); if ((GETTYPE(_line) == 1 && _line == -1)||_line == '') { break; } と書いた場合、ファイルに空行がある場合でもこの条件式が成立し、「読み込みエラーが起きていないのに」ファイルの読み込みが終了してしまいます。 ※GETTYPEで_lineの型をチェックしているのは、「-1しか書かれていない行」が読み込まれた場合への対策です。 EOFで返ってくる「数値としての-1」と、ファイルから読み込んだ「文字列としての"-1"」をGETTYPEで区別しています。 もっとも、FREADで「読み込みエラーが発生したら読み取り中止」とする使い方はほとんどないでしょうから、事実上問題はないと思います。 とは言え、FREAD関数で、「読み込みエラーの空文字列」と「ファイルの空行」が区別できない可能性があることに気付いてしまいましたので、一応報告しておきます。 既に回避策があるようでしたら申し訳ありません。 | ||||
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-03-31 20:26 | guest | New Issue |