cpointersc-stringsfunction-definitionstrcat

Trying to create a strcat in c


So, I'm trying to code a strcat function using pointers, just for studying purposes.

#include <stdio.h>
#include <string.h>

char *strcpyy(char *dest, char *orig){
    char *tmp = dest;
    while (*dest++ = *orig++);
    return tmp;
}

char *strcatt(char *dest, char *orig){
    strcpyy(dest + strlen(dest), orig);
    return dest;
}



int main(){
    char *a = "one";
    char *b = "two";
    printf("%s", strcatt(a,b));
}

When I run this code, the output is empty. Can anyone point out the problem?


Solution

  • String literals are read-only. Any attempt to write to a string literal will invoke undefined behavior, which means that your program may crash or not behave as intended.

    Therefore, you should not use a pointer to a string literal as the first argument to strcat or your equivalent function. Instead, you must provide a pointer to an object which is writable and has sufficient space for the result (including the terminating null character), for example a char array of length 7. This array can be initialized using a string literal.

    Therefore, I recommend that you change the line

    char *a = "one";
    

    to the following:

    char a[7] = "one";
    

    After making this change, your program should work as intended.