#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int a;
char c[1];
printf("\n%d\n", a);
gets(c);
printf("\n%d\n", a);
return 0;
}
当使用 gets
读取 c
时,先前打印的 a
的值被打印为具有以下值:0
;当使用 scanf("%c", &c);
代替 gets(c);
时,a
的值始终保持不变代码。
我似乎无法弄清楚这是为什么,有人可以解释一下这是怎么可能的吗?
最佳答案
您可能遇到堆栈损坏。 gets()
将输入字符写入您传入的内存地址(指向 c
的第一个元素的指针)。但是,您只分配了 1 个字符,这只够空字符串(包括 null 终止符)。
这就是为什么永远不要使用 gets()
的原因。它不安全,因为它可以覆盖其目标数组的末尾。请改用更安全的函数,例如 fgets()
。
关于c - 关于 gets(string) 的非常奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20790491/