C 超出读取()的缓冲区大小 #定义最大缓冲大小64 字符输入[MAX_BUFF_SIZE]; int inSize=读取(0,输入,最大缓冲大小); if(inSize最大缓冲大小){ printf(“读取时出错。\n”); 出口(-1); }

C 超出读取()的缓冲区大小 #定义最大缓冲大小64 字符输入[MAX_BUFF_SIZE]; int inSize=读取(0,输入,最大缓冲大小); if(inSize最大缓冲大小){ printf(“读取时出错。\n”); 出口(-1); },c,unix,input,C,Unix,Input,我正在编写一个程序,提示用户输入,该输入的最大大小为64个字符。如果用户输入的字符超过64个,则程序应退出 我相信我正确地使用了read(),但即使我传入>64个字符,它也不会导致任何错误/异常。我做错了什么 我是否可以检查用户是否使用read()输入了超过64个字符?read()将永远不会读取超过您允许的字节数。如果您告诉它最多读取64个字节,即使有更多可用数据,它也最多读取64个字节。尚未读取的字节可用于进一步读取(我假设输入是STDIN\u FILENO,在这种情况下,它们只是留在STDI

我正在编写一个程序,提示用户输入,该输入的最大大小为64个字符。如果用户输入的字符超过64个,则程序应退出

我相信我正确地使用了
read()
,但即使我传入>64个字符,它也不会导致任何错误/异常。我做错了什么


我是否可以检查用户是否使用read()输入了超过64个字符?

read()
将永远不会读取超过您允许的字节数。如果您告诉它最多读取64个字节,即使有更多可用数据,它也最多读取64个字节。尚未读取的字节可用于进一步读取(我假设
输入
STDIN\u FILENO
,在这种情况下,它们只是留在STDIN缓冲区中)。

但是read似乎返回输入的尾随部分(64个字符之后的部分)?我是否可以检查用户输入的字符是否超过64个?@user1043625您最需要阅读
read()
的文档。你可以发现它返回的是读取的字节数,而不是假设(“它似乎是”,等等)。显然你是在这里做假设的人。当我打印输入时,我得到输入的尾随部分。@user1043625“打印输入”是怎么回事?如果读取填充了缓冲区,则
输入
通常不是正确的空终止符,使用
printf
打印它将产生不可靠的结果。您需要显示更多的代码。你真的需要阅读文档。阅读
read()
的文档,就像建议的汽水一样
inSize>MAX\u BUFF\u SIZE
永远不会发生,并且
inSize==0
不是错误。
#define MAX_BUFF_SIZE   64
char input[MAX_BUFF_SIZE];

int inSize = read(0, input, MAX_BUFF_SIZE);
if(inSize <= 0 || inSize > MAX_BUFF_SIZE){
     printf("An error occurred in the read.\n");
     exit(-1);
}