为了检测它,我看到了以下
if
情况:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
char line[5];
while(fgets(line, 5, stdin)){
int length = strlen(line);
if (length == 4 && line[3] != '\n') {
puts("line too long");
return 1;
}
}
puts("correct file");
return 0;
}
在这里工作:
$ cc test.c -o test
$ printf '012\n' | ./test
correct file
$ printf '012' | ./test
correct file
$ printf '0123\n' | ./test
line too long
但是当长度等于最大值并且没有尾随换行符时失败:
$ printf '0123' | ./test
line too long
检测不正确,因为整条线都适合缓冲区;文件中没有更多内容可供读取。
整条线都适合缓冲区;文件中没有更多内容可供读取。
所以检查一下
if (length == 4 && (line[3] != '\n' || feof(stdin))) {