1. ホーム
  2. c

[解決済み] strcpyとmemcpyの比較

2022-02-02 04:29:51

質問

とはどのような違いがあるのでしょうか。 memcpy()strcpy() ? プログラムの助けを借りてそれを見つけようとしましたが、両方とも同じ出力を与えています。

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

出力

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

解決方法は?

<ブロッククオート

この効果を見るためにできること

このコードをコンパイルして実行してください。

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

このように出力されます。

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

によってコピーされたことがわかります。 memcpy() でなく strcpy() .