gpt4 book ai didi

c - 关于 gets(string) 的非常奇怪的错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:18 25 4
gpt4 key购买 nike

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com