Ошибка при написании strcat () с использованием указателей

Я пытаюсь изучить 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

Почему это не работает? Кто-нибудь может уточнить ошибку здесь ..

1

Решение

Потому что указатели являются указателями на литералы, и не только те, только для чтения место назначения недостаточно велико, чтобы вместить обе строки. По крайней мере для string1 Вы хотели бы использовать массив по крайней мере достаточно большого размера, чтобы содержать обе строки (включая терминатор). Подобно:

char string1[128] = "Stack";

или же

char string1[128];
strcpy(string1, "Stack");
2

Другие решения

Программа пытается добавить символы в буквальную строку "stack", Не делай этого; создайте массив символов, достаточно большой для хранения результата, скопируйте первую строку в массив, а затем strcat остальная часть строки.

Да, и назовите свою функцию как-нибудь иначе strcat, Это имя уже занято.

0

В этой строке:

while(*s++ = *t++);

вы разыменование s который указывает на один конец конца массива char "stack", Это вызывает segmentation fault ошибка.

0

 char *name1;
char *name2;
name1 = "stack" ;
name2 = "overflow";

==>

 char name1[20];
char name2[10];
memcpy(name1,"stack") ;
memcpy(name2,"overflow");
0
По вопросам рекламы [email protected]