这个程序中c(char行[LINE_SIZE];)和(char * result)中的2个变量之间的差异

时间:2013-11-15 06:34:31

标签: c

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

3 个答案:

答案 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] ......不行。