私は以下のプログラムを持っています。変数 a、b、c の静的グローバル変数を宣言すると、セグメンテーション違反が発生しますが、非静的グローバル変数またはローカル変数として宣言すると、セグメンテーション違反は発生しません。なぜそのような振る舞いをするのでしょうか。変数よりも多くのデータを格納できることはわかっていますが、宣言された static のみの場合に seg fault が発生するのはなぜですか? 静的に宣言された変数は、上書きが許可されていないスタック フレームの別の部分に格納されていますか?
編集: strcpy が安全でないことはわかっています。しかし、それは私の問題ではありません。1 つのオーバーフローで segfault が発生する理由と、もう 1 つのオーバーフローで segfault が発生しない理由を理解したい。
#include<stdio.h>
#include<string.h>
static char a[16];
static char b[16];
static char c[32];
int main(int argc, char *argv[]){
// char a[16];
//char b[16];
//char c[32];
strcpy(a,"0123456789abcdef");
strcpy(b,"0123456789abcdef");
strcpy(c,a);
strcpy(c,b);
printf("a = %s\n",a);
return 0;
}