gpt4 book ai didi

C tiny,预分配数组不会溢出

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

我原以为这段代码会出现段错误:

char * foo (char my_ascii[10])
{
strcpy (my_ascii, "0123456789");

return my_ascii;
}

char bar[2];

printf("%s\n", foo (bar));

因为 bar 在堆栈中保留了一个 2 个字符的数组,而 foo() 尝试写入 10 个字符。但是,printf() 在 stdout 中写入 10 个字符并且不会发生错误。为什么会这样?

另外,如果我这样修改 foo() 函数:

char * foo (char my_ascii[1])
{
strcpy (my_ascii, "0123456789");

return my_ascii;
}

行为完全相同:10 个字符被复制到 my_ascii。有什么解释吗?

非常感谢您。

最佳答案

像指定数组参数的长度

char * foo (char my_ascii[1]) ...

没有任何区别,因为它被省略了(数组在函数内部退化为指针)。

此外,缓冲区溢出是未定义的行为,这意味着:不能保证程序会崩溃。它可能完全合法地看起来没有问题......或者只在星期四满月时产生段错误......或者默默地从你的数据库中删除所有记录。真的,任何东西。

关于C tiny,预分配数组不会溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5394194/

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