C - fgets从stdin读取行,最大长度为1024?

时间:2016-09-07 03:43:13

标签: c stdin fgets

更新: 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("%s\n", buffer);
    }

    return 0;
}

在终端中编译并运行它。     [。/测试] 然后输入一行字符,长度为1024.它不起作用,无法打印缓冲区。当我输入1023时,它将打印这1023个字符。它可以打印大于1024个字符,这些字符从本地打开文件读取。 那么,stdin最大长度是1024?但是显示ARG_MAX是(256 * 1024), 我的代码出了什么问题? 我有一个参考: How to read from stdin with fgets()?; c-read-line-from-stdin-with-fgets-in-function

1 个答案:

答案 0 :(得分:1)

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