C fgets缓冲区大小

C fgets缓冲区大小,c,file,io,fgets,C,File,Io,Fgets,我有一个C语言的程序,它读取带有缓冲区的文件: char buffer[65536]; while(fgets(buffer,65536,inputFile)){...} 现在我有一些问题: 如果文件大小小于buffersize,会发生什么情况 fgets()是否覆盖了完整的缓冲区,因此,如果前一个缓冲区(buffer1)已满,而下一个缓冲区(buffer2)(例如大小10)未满,缓冲区中是否仍包含buffer1的字符(例如,在buffer2[20]=buffer1[20]处),因为它没有覆盖

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

char buffer[65536];
while(fgets(buffer,65536,inputFile)){...}
现在我有一些问题:

  • 如果文件大小小于buffersize,会发生什么情况
  • fgets()是否覆盖了完整的缓冲区,因此,如果前一个缓冲区(buffer1)已满,而下一个缓冲区(buffer2)(例如大小10)未满,缓冲区中是否仍包含buffer1的字符(例如,在buffer2[20]=buffer1[20]处),因为它没有覆盖
  • 如何知道缓冲区中有多少个字符,以便可以反向循环缓冲区

  • 如评论所示,
    man
    可以在这里提供帮助,或者谷歌。。。从

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

    而且:

    返回值:成功时为str,失败时为null指针


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

    正如注释所示,
    人可以在这里提供帮助,或者谷歌。。。从

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

    而且:

    返回值:成功时为str,失败时为null指针


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

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

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

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

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

  • 所有这些问题都可以通过查看
    man fgets
    @fangio来回答。请在使用之前阅读函数说明。(1)缓冲区没有填满。(2) 只显示了一个缓冲区;我们无法猜测代码与
    buffer1
    buffer2
    的交互方式。(3) 结尾有一个空字节,可能前面有一个换行符。在行的中间可能有空字节;没有办法可靠地发现这一点。如果您需要可靠地知道长度,请使用POSIX函数,因为它会报告读取的长度(也会为您管理内存)。还要注意,
    fgets
    遇到换行符时会停止读取。如果您试图读取整个文件,请查看
    fread
    。所有这些问题都可以通过查看
    man fgets
    @fangio来回答。请在使用之前阅读函数说明。(1)缓冲区没有填满。(2) 只显示了一个缓冲区;我们无法猜测代码与
    buffer1
    buffer2
    的交互方式。(3) 结尾有一个空字节,可能前面有一个换行符。在行的中间可能有空字节;没有办法可靠地发现这一点。如果您需要可靠地知道长度,请使用POSIX函数,因为它会报告读取的长度(也会为您管理内存)。还要注意,
    fgets
    遇到换行符时会停止读取。如果您试图读取整个文件,请查看
    fread
    。因此,如果文件为“hello”且缓冲区大小为100,则缓冲区将包含“hello”和缓冲区[5]='\0',或者我错了吗?您是对的。如果文件为“hello\nblabla”,则将有两次迭代等。因此,如果文件为“hello”且缓冲区大小为100,则缓冲区将包含“hello”和缓冲区[5]='\0',或者我错了吗?您是对的。如果文件为“hello\nblabla”,则将有两次迭代等。