【发布时间】:2021-06-22 11:34:26
【问题描述】:
当使用int scanf(const char *format, ...) 扫描用户输入时,我会读取比字符串大小少一个字符,因为字符串的最后一个字符必须是null character \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);
【问题讨论】:
-
第一个,fgets 使用最后一个元素来终止字符串。是的,推荐的用法是
fgets(str, sizeof str, stdin); -
@anastaciu 好的,谢谢!
标签: c string stdin fgets null-character