我最近开始学习C并且遇到了代码剪切的一点问题.
我想要想要读取一个字符串,20个字符长,超过stdin,所以我选择了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;
}
Run Code Online (Sandbox Code Playgroud)
它编译没有任何错误,如果我输入一个短于20个字符的句子,一切都很好.但是当我尝试测试错误处理时,它失败了.
输出是:
peter@antartica ~/test % ./test
Hello world, this is a very long test
Hello world, this i%
Run Code Online (Sandbox Code Playgroud)
我做错了吗?我认为fgets如果失败会返回一个NULL指针(这应该是这种情况)?
感谢您的任何帮助.
从fgets参考:
成功时,函数返回str.
如果在尝试读取字符时遇到文件结尾,则设置eof指示符(feof).如果在读取任何字符之前发生这种情况,则返回的指针是空指针(并且str的内容保持不变).
如果发生读取错误,则设置错误指示符(ferror)并返回空指针(但str指向的内容可能已更改).
因此,NULL如果到达文件结尾,它可能会返回而不会产生错误.您可能需要查看ferror返回值以确定它.
请注意,fgets()会自动\0在字符串的末尾附加一个空字符(),这可能会导致字符串被截断,因为您指定必须读取多少个字符.如果length找到包含多个字符的字符串,则调用不会失败.