Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C “的奇怪行为”;“检测到堆栈崩溃”;_C_Arrays_Gcc_Stack - Fatal编程技术网

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段中,而不是堆栈上
  • 有一种可能性,一切都可能按预期工作,但这是UB的副作用,在另一种情况下,您可能会看到崩溃

  • 一个原因是结构不在堆栈上。它位于.bss部分。程序试图做什么?当然,如果您可以键入足够长的字符串,即使是结构中的数组也会让您思考一些有趣的问题。程序试图知道为什么结构中的数组不会给出与main中声明的数组类似的错误。“检测到堆栈崩溃”-所以问问自己,
    b
    驻留在哪里,它与数组有何不同?如果您将
    b
    移动到
    func()
    ,您很可能会实现所需的消息传递,这是否会带来安慰?