c-使用fgets从stdin(终端)读取一行,最大长度为1024



更新:
OSX El Capitan,Xcode 7.3

输入:

0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890001

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFERSIZE 2048
int 
main()
{
    char buffer[BUFFERSIZE];
    printf("Enter a message: n");
    while (fgets( buffer, BUFFERSIZE, stdin) != NULL)
    {
        printf("%sn", buffer);
    }
    return 0;
}

编译并在终端中运行。

./test

则输入一行字符,长度为1024。它不起作用;它无法打印缓冲区。当我输入1023个字符时,它将打印1023个字。它可以打印fgets从本地打开的文件中读取的1024个以上的字符。

因此,对于来自终端的标准输入,即使<syslimits.h>显示ARG_max是(256*1024(,最大长度也是1024。

我的代码出了什么问题?

我有一些参考资料:

  • 如何使用fgets((从stdin读取
  • c-read-line-from-stdin-with-fgets-in-function

代码本身没有问题。问题是终端驱动程序的缓冲区限制为1 KiB,因此您不能输入超过1023个字符加一个换行符。大多数系统都有类似的限制。从历史上看,限制要小得多,比如256字节。

最新更新