更新:
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字节。