У меня есть программа ниже. Если я объявлю переменные a, b, c статическими глобальными переменными, это приведет к ошибке сегментации, но если я объявлю их нестатическими глобальными или локальными переменными, это не приведет к ошибке сегментации. Почему так себя ведет? Я знаю, что данных больше, чем могут хранить переменные, но почему он выдает ошибку seg, когда объявлен только статический? Хранятся ли статически объявленные переменные в какой-то другой части кадра стека, где перезапись не разрешена?
РЕДАКТИРОВАТЬ: я знаю, что strcpy небезопасен. Но это не моя проблема. Я хочу понять, почему одно переполнение дает segfault, а другое переполнение может не давать 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;
}