关于文件:C fgets buffersize

C fgets buffersize

我有一个用C语言编写的程序,该程序读取带有缓冲区的文件:

1
2
char buffer[65536];
while(fgets(buffer,65536,inputFile)){...}

现在我有一些问题:

  • 如果文件大小小于缓冲区大小会怎样?
  • fgets()是否会覆盖整个缓冲区,所以如果前一个缓冲区(buffer1)已满,而下一个缓冲区(buffer2)(例如大小为10)未满,则该缓冲区中是否仍会包含buffer1的字符,例如在buffer2 [ 20] = buffer1 [20],因为它没有覆盖?
  • 如何知道缓冲区中有多少个字符,因此可以向后循环缓冲区

  • 要回答您的问题,首先您必须了解fgets(3)。它一次读取一行,到达换行符或EOF后fgets()返回。并附加" \ 0"以终止字符串。我回答您的问题如下...

  • 通常,fgets()一次只获取一行字符串,而不是整个文件。在您的代码中,这意味着该行的最大长度为65535 +'\ 0'使65536,这被认为太长。要读取文本文件,通常必须将fgets()放入for()或while()循环中,直到达到EOF(缓冲区== NULL)为止。
  • 如果读取的行比缓冲区的长度长,它将只读取缓冲区的长度-1个字符,然后追加'\ 0'。
  • strlen(3)将为您提供字符串的长度。

  • 正如评论所建议的,man可以在这里提供帮助,也可以在Google上提供帮助...来自cppreference

    Reads at most count - 1 characters from the given file stream and stores them in the character array pointed to by str. Parsing stops if end-of-file occurs or a newline character is found, in which case str will contain that newline character. If no errors occur, writes a null character at the position immediately after the last character written to str.

    并且:

    Return value: str on success, null pointer on failure.

    基本上,数字是您读取的字符数+1。通常,您不会吞噬整个生产线,而只会吞噬其中的一部分。在任何情况下,缓冲区都有一个空终止符,您可以继续读取直到EOF。