C:使用fgets()从文件

时间:2015-06-20 23:05:11

标签: c char fgets

我目前有这个>

FILE *in=fopen("some_file.txt", "r");
char input[3];
int i=0, j=0;

if(in!=NULL) {
  fgets(input, sizeof(input), in);
  initialize(input);
}

  while(j<100) {
    fgets(input, sizeof(input), in);
    addNode(head,input);
    j++;
  }
fclose(in);

display();

我认为fgets()存在问题。在我看来,三个字符是&gt;  input[0] = some charinput[1] = '\0'input[2] = not_important

而且,这看起来还不错,但是,在我的文件中有几个包含2个字符的元素..这就是问题的起点。 我相信这个输入应该有效:

input[0] = some charinput[1] = 'some_char'input[2] = '\0'。 但是,它没有......

输入文件&gt;

  

A B C D E

     

Q W E R Ty

     

Z X C V B

我的输出:

  

数据1:A

     

数据2:B

     

数据3:C

     

数据4:D

     

数据5:E

     

数据6:问

     

数据7:W

     

数据8:E

     

数据9:R

     

数据10:Ty

     

数据11:

     

数据12:Z

     

数据13:X然后又回到“正常”

因此,添加了一个不应该存在的元素......它在具有两个字符的元素之后添加。该元素也在最后,但我不认为这与它有任何关系。

有什么想法吗?

我刚测试了它,带有两个chars的元素如下所示:

  

输入[0] ='Y'输入[1] ='u'输入[2] ='\ 0'

就像我想象的那样......但是,仍然会创建一个Node ...

另一个测试:在此之后的下一个元素,也应该有input[0]=some_char ......

1 个答案:

答案 0 :(得分:1)

正如文档所说,fgets读取换行符,但最多只有一个size个字符。如果它读取所有内容,但不包括换行符,则下一次读取将读取该换行符并停止。

因此,除非换行符,否则每次读取最多会读取两个字符。您的阅读材料为A<space>B<space>C<space>D<space>E<newline>Q<space>W<space>E<space>R<space>Ty<newline>Z<space>,...

为什么你会期待别的什么?