[英]Return value of fgets()
我剛剛開始在C
使用I/O
這是我的問題 -
我有一個文件,我從中讀取了我的輸入。 然后我使用fgets()
來獲取緩沖區中的字符串,我以某種方式使用它。 現在,如果輸入對於緩沖區而言太短,即fgets()
的第一次讀取達到EOF
,會發生什么。 fgets()
應該返回NULL
(正如我在fgets()
文檔中讀到的那樣)? 它似乎沒有,我得到了正確的輸入。 除了我的feof(input)
並沒有說我們已經達到了EOF
。
這是我的代碼片段。
char buf[BUFSIZ];
FILE *input,
*output;
input = fopen(argv[--argc], "r");
output = fopen(argv[--argc], "w");
/**
* If either of the input or output were unable to be opened
* we exit
*/
if (input == NULL) {
fprintf(stdout, "Failed to open file - %s.\n", argv[argc + 1]);
exit(EXIT_FAILURE);
}
if (output == NULL) {
fprintf(stdout, "Failed to open file - %s.\n", argv[argc + 0]);
exit(EXIT_FAILURE);
}
if (fgets(buf, sizeof(buf), input) != NULL) {
....
}
/**
* After the fgets() condition exits it is because, either -
* 1) The EOF was reached.
* 2) There is a read error.
*/
if (feof(input)) {
fprintf(stdout, "Reached EOF.\n");
}
else if (ferror(input)) {
fprintf(stdout, "Error while reading the file.\n");
}
fgets()
的文檔沒有說出你的想法:
從我的手冊頁
fgets()
從流中讀取最多一個小於size
字符,並將它們存儲到s
指向的緩沖區中。 讀數在EOF
或換行符后停止。 如果讀取換行符,則將其存儲到緩沖區中。 終止空字節('\\0
')存儲在緩沖區中的最后一個字符之后。
然后
gets()
和fgets()
在成功時返回s
,在出錯時或在文件結束時沒有讀取任何字符時返回NULL
。
我沒有讀到,因為說EOF
將被視為錯誤條件並返回NULL
。 實際上它說只有在沒有讀取字符的情況下發生EOF
時才會出現NULL
。
POSIX標准(遵循不太容易訪問的C標准)在這里: http : //pubs.opengroup.org/onlinepubs/009695399/functions/fgets.html並聲明:
成功完成后,
fgets()
將返回s
。 如果流位於文件末尾,則應設置流的文件結束指示符,並且fgets()
應返回空指針。 如果發生讀錯誤,則應設置流的錯誤指示符,fgets()
應返回空指針,並設置errno
以指示錯誤。
這清楚地表明,如果在調用時它實際上處於EOF
狀態,它將僅返回NULL
,即如果讀取任何字節,則不會返回NULL
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.