当使用 扫描用户输入时int scanf(const char *format, ...)
,我会读取比字符串大小少一个字符,因为字符串的最后一个字符必须是空字符 \0
。
char str[10];
scanf("%9s", str); /* take \0 into account */
但是当我使用时char *fgets(char *str, int n, FILE *stream)
,我不知道我应该如何指定n
。大多数在线教程都将其设置为sizeof(str)
,但有人告诉我应该是sizeof(str) - 1
。
那么如何防止缓冲区溢出呢?像这样:
char str[10];
fgets(str, 10, stdin);
或者我应该这样做:
char str[10];
fgets(str, 9, stdin);