【发布时间】:2020-08-23 11:47:26
【问题描述】:
我的程序应该通过标准输入接受输入并将字符串存储到大小为SIZE的数组中。
当我输入 7 个或更多值时出现问题;当程序在循环中运行时,仍然使用超出缓冲区大小的值,不断用 stdin 中剩余的内容填充buf(至少,我认为它是这样工作的)。
#define SIZE 8
char *readLine(char *buf, size_t size) {
printf("$ ");
fgets(buf, size, stdin);
return buf;
}
int main() {
char *buf = malloc(SIZE * sizeof(char));
for (;;) {
readLine(buf, SIZE);
printf("> %s", buf);
}
}
我的输出,分别测试输入大小为 6、7 和 8:
$ abcdef
> abcdef
$ abcdefg
> abcdefg$ >
$ abcdefgh
> abcdefg$ > h
我不明白的事情:
- 为什么第 7 个值会让程序的输出看起来很奇怪?我认为第 7 个字符加上空字符可以正常工作?
- 为什么
buf会填充超出SIZE大小(在本例中为8)的值?
据此,我可以进行简单的更改/添加以实现我想要的吗?
【问题讨论】:
标签: c memory-management malloc stdin fgets