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

时间:2013-08-31 15:51:14

标签: c++ c arrays pointers kernighan-and-ritchie

我正在尝试用The C programming Language by K&R学习C语言。我正在尝试使用指针编写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 个答案:

答案 0 :(得分:2)

因为指针是指向文字的指针,并且不仅只读,所以目标不足以包含两个字符串。对于至少string1,您可能希望使用至少足够大的数组来包含两个字符串(包括终结符)。像:

char string1[128] = "Stack";

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

答案 1 :(得分:0)

在这一行:

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

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

答案 2 :(得分:0)

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

哦,并将您的功能命名为strcat以外的其他功能。这个名字已经被采用了。

答案 3 :(得分:0)

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

==>

 char name1[20];
 char name2[10];
 memcpy(name1,"stack") ;
 memcpy(name2,"overflow");