我期待这段代码出现段错误:
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() 写入标准输出 10 个字符并且不会发生错误。为什么会这样?
此外,如果我以这种方式修改 foo() 函数:
char * foo (char my_ascii[1])
{
strcpy (my_ascii, "0123456789");
return my_ascii;
}
行为完全相同:将 10 个字符复制到 my_ascii。有什么解释吗?
非常感谢您提前。