Search code examples
c++carrayspointerskernighan-and-ritchie

Error while writing strcat() using pointers


I am trying to learn C with The C programming Language by K&R. I am trying to write a the strcat() program using pointers.

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;
}

But I am getting the ouput as

stack overflow
Segmentation fault

Why is it not working ? Can anybody clarify the mistake here..


Solution

  • Because the pointers are pointers to literals, and not only are those read only the destination is not big enough to contain both the strings. For at least string1 you would want to use an array of at least big enough size to contain both strings (including the terminator). Like:

    char string1[128] = "Stack";
    

    or

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