Я пытаюсь изучить C с The C programming Language by K&R
, Я пытаюсь написать strcat()
программа с использованием указателей.
char *strcat (char *s, char *t){
char *d;
d = s;
while(*s++);
s--;
while(*s++ = *t++);
return d;
}
int main () {
char *name1;
char *name2;
name1 = "stack" ;
name2 = "overflow";
printf("%s %s\n", name1, name2);
printf("strcat out : %s", strcat(name1, name2));
return 0;
}
Но я получаю выход как
stack overflow
Segmentation fault
Почему это не работает? Кто-нибудь может уточнить ошибку здесь ..
Потому что указатели являются указателями на литералы, и не только те, только для чтения место назначения недостаточно велико, чтобы вместить обе строки. По крайней мере для string1
Вы хотели бы использовать массив по крайней мере достаточно большого размера, чтобы содержать обе строки (включая терминатор). Подобно:
char string1[128] = "Stack";
или же
char string1[128];
strcpy(string1, "Stack");
Программа пытается добавить символы в буквальную строку "stack"
, Не делай этого; создайте массив символов, достаточно большой для хранения результата, скопируйте первую строку в массив, а затем strcat
остальная часть строки.
Да, и назовите свою функцию как-нибудь иначе strcat
, Это имя уже занято.
В этой строке:
while(*s++ = *t++);
вы разыменование s
который указывает на один конец конца массива char "stack"
, Это вызывает segmentation fault
ошибка.
char *name1;
char *name2;
name1 = "stack" ;
name2 = "overflow";
==>
char name1[20];
char name2[10];
memcpy(name1,"stack") ;
memcpy(name2,"overflow");