1

我正在尝试用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

为什么它不工作?任何人都可以在这里澄清错误..

4

4 回答 4

2

因为指针是指向文字的指针,不仅是那些只读的,目标还不够大,无法包含两个字符串。至少string1您希望使用一个至少足够大的数组来包含两个字符串(包括终止符)。喜欢:

char string1[128] = "Stack";

或者

char string1[128];
strcpy(string1, "Stack");
于 2013-08-31T15:55:55.470 回答
0
 char *name1;
 char *name2;
 name1 = "stack" ;
 name2 = "overflow";

==>

 char name1[20];
 char name2[10];
 memcpy(name1,"stack") ;
 memcpy(name2,"overflow");
于 2013-08-31T16:13:35.180 回答
0

在这一行:

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

您取消引用s指向 char 数组末尾的一个"stack"。这会导致segmentation fault错误。

于 2013-08-31T15:55:56.353 回答
0

该程序尝试将字符附加到文字字符串"stack"。不要那样做;创建一个足够大的字符数组来保存结果,将第一个字符串复制到数组中,然后复制字符串strcat的其余部分。

哦,将您的函数命名为strcat. 该名称已被使用。

于 2013-08-31T15:56:58.930 回答