C fgets缓冲区

时间:2016-11-23 17:48:56

标签: c file io fgets

我在C中有一个程序,它用缓冲区读取文件:

Press Play
TU: 1
TU: 2
TU: 3 // now i use the mouse to seek forward to 19
TU: 19
//chrome & ff fire pause in between, ie not
Seek Start: 19
TU: 19
Seek End: 19
TU: 19
//chrome & ff fire play, ie not
TU: 20
...

现在我有一些问题:

  1. 如果filesize小于buffersize,会发生什么?
  2. fgets()是否会覆盖整个缓冲区,因此如果前一个缓冲区(buffer1)已满,而下一个缓冲区(缓冲区2)(例如大小为10)不是,则缓冲区中是否还有缓冲区1的字符例如在buffer2 [20] = buffer1 [20],因为它没有覆盖?
  3. 如何知道缓冲区内有多少个字符,因此可以向后循环缓冲区

2 个答案:

答案 0 :(得分:2)

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

  1. 通常fgets()一次占用一行字符串而不是整个文件。在您的代码中,这意味着该行的最大长度为65535 +' \ 0'制作65536,这被认为太长了。要读取文本文件,通常必须将fgets()放入for()或while()循环,直到达到EOF(缓冲区== NULL)。
  2. 如果它读取的行长于缓冲区的长度,它将只读取缓冲区长度 - 1个字符,然后附加' \ 0'。
  3. strlen(3)会给你字符串的长度。

答案 1 :(得分:1)

正如评论所示,man可以在这里提供帮助,或者谷歌......来自cppreference

  

最多读取 - 给定文件流中的1个字符,并将它们存储在str指向的字符数组中。如果发生文件结束或找到换行符,则解析将停止,在这种情况下,str将包含该换行符。如果没有错误发生,请在写入str的最后一个字符后紧跟位置写入空字符。

还有:

  

返回值:str成功,空指针失败。

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