0

一个非常简单的 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;
}
4

3 回答 3

2
while(line != NULL)

线是一个数组。如果你只写line,它总是会返回一个指向它的第一个元素(这里是一个字符)的指针。因此,上述条件将始终为真。

fgets函数在成功时返回您的数据指针,在失败时返回 NULL(例如,当到达文件末尾并且它无法读取任何字符时)。

于 2013-11-15T06:42:45.720 回答
1

fgets成功时,函数返回string. 如果找到文件结尾 ( EOF),则返回的指针是 a null pointer(因此您的指针result将变为null),并且 的内容string保持不变(在您的情况下line保持不变)。

因此

while(line != NULL) 

将继续执行,因为 line 保持不变。

于 2013-11-15T06:44:11.183 回答
0

char line[LINE_SIZE], line 是一个数组名,它是一个常数,永远不能为空,如果你写 line = fgets(line, LINE_SIZE, infile);,它会报错!fgets() 改变 line[0], line[1], line[2]... 不是 line。

于 2013-11-15T08:36:31.663 回答