C “的奇怪行为”;“检测到堆栈崩溃”;
这是我的密码C “的奇怪行为”;“检测到堆栈崩溃”;,c,arrays,gcc,stack,C,Arrays,Gcc,Stack,这是我的密码 struct ar { char array[10]; }b; void func() { char array[10]; scanf("%s",b.array); printf("%s\n", b.array); scanf("%s",array); printf("%s\n", array); } int main(int argc, char **argv) { func(); } 当我从命令行为这两个数组指定长度大
struct ar {
char array[10];
}b;
void func()
{
char array[10];
scanf("%s",b.array);
printf("%s\n", b.array);
scanf("%s",array);
printf("%s\n", array);
}
int main(int argc, char **argv)
{
func();
}
当我从命令行为这两个数组指定长度大于数组大小的字符串时,我将面临在main中定义的char数组中检测到堆栈崩溃错误,但结构内部的数组没有给出错误并打印正确的字符串
原因可能是什么
一个原因是结构不在堆栈上。它位于.bss部分。程序试图做什么?当然,如果您可以键入足够长的字符串,即使是结构中的数组也会让您思考一些有趣的问题。程序试图知道为什么结构中的数组不会给出与main中声明的数组类似的错误。“检测到堆栈崩溃”-所以问问自己,
b
驻留在哪里,它与数组有何不同?如果您将b
移动到func()
,您很可能会实现所需的消息传递,这是否会带来安慰?