一个非常简单的c程序,它从文件中读取并在终端上输出。 这里结果和行有什么区别? 例如,如果我在while循环中打印(result)或(line),则两者的输出都相同。
printf("%s", line);
printf("%s", result);
但如果我替换
,则在while循环的条件下while(result !=NULL)
带
while(line != NULL)
它不会停止。 源代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
const int LINE_SIZE = 1000;
FILE *infile;
char *result;
char line[LINE_SIZE];
infile = fopen("in.txt", "r");
result = fgets(line, LINE_SIZE, infile);
while(result != NULL)
{
//printf("%s", line);
printf("%s", result);
result = fgets(line, LINE_SIZE, infile);
}
return 0;
}
答案 0 :(得分:2)
while(line != NULL)
line 是一个数组。如果您只是编写 line ,它将始终返回指向其第一个元素(此处为字符)的指针。因此,上述条件将始终如一。
fgets 函数在成功时返回数据指针,失败时返回NULL(例如,当到达文件末尾并且无法读取任何字符时)。
答案 1 :(得分:1)
fgets
成功时,函数返回string
。
如果找到文件末尾(EOF
),则返回的指针为null pointer
(因此您的指针result
将变为null
)并且内容为string
保持不变(在你的情况下line
保持不变)。
因此
while(line != NULL)
将继续执行,因为线路保持不变。
答案 2 :(得分:0)
char line [LINE_SIZE],line是一个数组名,它是一个常量,永远不会为null,如果你写line = fgets(line,LINE_SIZE,infile);它会告诉错误! fgets()改变行[0],行[1],行[2] ......不行。