使用指针编写strcat()时出错

我正在尝试The C programming Language by K&R学习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");