程序不读取fgets()中定义长度的字符串

时间:2016-11-13 21:18:01

标签: c fgets stdio

我在使用Error: This expression has type 'a option but an expression was expected of type int 函数时发现了这样:

fgets

如果我输入#include <stdio.h> #include <stdlib.h> int main(void) { char str[10]; fgets(str, 5, stdin); printf("%s", str); system("PAUSE"); return 0; } ,则会输出123456789。这是4个字符 - 而不是我在函数中定义的5个字符。第五个角色发生了什么?

编辑:标题已更新

1 个答案:

答案 0 :(得分:0)

这是因为由于C字符串被NUL终止,fgets会考虑字符串终结符(\0),所以如果你传递一个5-char缓冲区,它是安全的。

在您的代码中,您应该:

fgets(str, sizeof(str), stdin);

因为str是一个已知大小的数组。