gpt4 book ai didi

c - 为什么缓冲区溢出不会影响这段代码?

转载 作者:行者123 更新时间:2023-11-30 15:34:36 24 4
gpt4 key购买 nike

我有以下代码:

int main(int argc, char *argv[])
{
char ch[10];
printf("String 10 max. :: "); gets( ch );

printf("String: %s\n", ch);

return 0;
}

当我使用 "12345678" 作为 ch 运行它时,它运行良好。奇怪的是,当我使用 "123456789012345678901234567890" 运行时!第二个 printf 将所有字符串(30 个字符)打印到屏幕上。

为什么会发生这种情况?为什么我的代码没有崩溃?

感谢您的宝贵时间,
阿兹特克

最佳答案

缓冲区溢出是未定义的行为。它可能会崩溃,但没有人保证这一点。在大多数编译器中,堆栈会向下增长,因此您可能会覆盖 main 的返回地址,但对 printf 的调用不会覆盖您的字符串。

关于c - 为什么缓冲区溢出不会影响这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23226217/

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