Поскольку p
указывает на область памяти только для чтения (сегмент __TEXT), которая содержит строку "abc
".
Как вы strcpy
, область памяти только для чтения будет перезаписана, что недопустимо. Так что ядро SegFault будет вашей программой.
Если вам нужна доступная для записи память, вам нужно выделить ее в стеке
char p[1024] = "abc";
или в кучу
char* p = malloc(1024);
...
free(p);
или в сегменте __DATA (то есть глобальной переменной)
static char p[1024] = "abc";