【发布时间】:2014-03-11 20:49:36
【问题描述】:
我最近开始学习C,遇到了一个代码被剪掉的小问题。
我想在标准输入上读取一个 20 个字符长的字符串,所以我选择了 fgets。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
unsigned int length = 20;
char input_buffer[length];
fgets(input_buffer, length, stdin);
if(input_buffer == NULL)
printf("Error, input too long");
else
printf("%s", input_buffer);
return 0;
}
它编译没有任何错误,如果我输入一个少于 20 个字符的句子,一切都很好。但是当我尝试测试错误处理时,它失败了。
输出是:
peter@antartica ~/test % ./test
Hello world, this is a very long test
Hello world, this i%
我做错了吗?我认为如果 fgets 失败,它会返回一个 NULL 指针(这里应该是这种情况)?
感谢您的帮助。
【问题讨论】:
-
请缩进您的代码。
-
如果您从
stdin中读取20 个字符,您可能输入的是20 + 1'\n',因此代码需要存储21char。而字符串需要'\0',所以现在考虑unsigned int length = 20+1+1;