Насколько я понимаю, строковые литералы хранятся в постоянной памяти, и их изменение во время выполнения приводит к ошибке сегментации, но мой приведенный ниже код компилируется без ошибки сегментации.
#include <string.h>
#include <stdio.h>
int main() {
char* scr = "hello";
strcpy(scr,scr);
printf("%s\n",scr);
return 0;
}
output: hello
То же самое, если я попытался скопировать исходную строку в разные строковые литералы назначения, то выдается ошибка сегментации
#include <string.h>
#include <stdio.h>
int main() {
char* scr = "hello";
char* dst = "hello";
strcpy(dst,scr);
printf("%s\n",dst);
return 0;
}
output: ошибка сегментации (сбрасывается ядро)
в соответствии сРеализация strcpy () в книге K & R похожа на приведенную ниже
void strcpy(char *s, char *t)
{
while ((*s = *t) != '\0') {
s++;
t++;
}
}
, если это так, у меня должна быть ошибка сегментации в обоих случаях.
сведения о компиляторе:
gcc версия7.3.0 (Ubuntu 7.3.0-27ubuntu1 ~ 18.04)