Search code examples
cmemcpystrcpy

strcpy vs. memcpy


What is the difference between memcpy() and strcpy()? I tried to find it with the help of a program but both are giving the same output.

int main()
{
    char s[5] = { 's', 'a', '\0', 'c', 'h' };
    char p[5];
    char t[5];
    strcpy(p, s);
    memcpy(t, s, 5);
    printf("sachin p is [%s], t is [%s]", p, t);
    return 0;
}

Output

sachin p is [sa], t is [sa]

Solution

  • what could be done to see this effect

    Compile and run this code:

    void dump5(char *str);
    
    int main()
    {
        char s[5]={'s','a','\0','c','h'};
    
        char membuff[5]; 
        char strbuff[5];
        memset(membuff, 0, 5); // init both buffers to nulls
        memset(strbuff, 0, 5);
    
        strcpy(strbuff,s);
        memcpy(membuff,s,5);
    
        dump5(membuff); // show what happened
        dump5(strbuff);
    
        return 0;
    }
    
    void dump5(char *str)
    {
        char *p = str;
        for (int n = 0; n < 5; ++n)
        {
            printf("%2.2x ", *p);
            ++p;
        }
    
        printf("\t");
    
        p = str;
        for (int n = 0; n < 5; ++n)
        {
            printf("%c", *p ? *p : ' ');
            ++p;
        }
    
        printf("\n", str);
    }
    

    It will produce this output:

    73 61 00 63 68  sa ch
    73 61 00 00 00  sa
    

    You can see that the "ch" was copied by memcpy(), but not strcpy().