80

strcpy文字列をコピーするためのものであると読みstrdup、文字列を複製するために新しい文字列へのポインタを返します。

strcpyどのケースを使用したいのか、どのケースを使用したいのか説明してくださいstrdup

4

5 に答える 5

114

strcpy(ptr2, ptr1)と同等ですwhile(*ptr2++ = *ptr1++)

ここで、strdupはと同等です

ptr2 = malloc(strlen(ptr1)+1);
strcpy(ptr2,ptr1);

memcpyバージョンの方が効率的かもしれません)

したがって、コピーした文字列を別の関数で使用する場合(ヒープセクションで作成されるため)、strdupを使用できます。それ以外の場合は、strcpyで十分です。

于 2012-12-24T11:51:50.013 に答える
16

strdupヒープ上の新しい文字列にメモリを割り当てますが、strcpy(またはそのより安全なバリアント)を使用している間、ヒープまたはスタックstrncpyの事前に割り当てられたメモリに文字列をコピーできます。

于 2012-12-24T10:57:57.903 に答える
14

受け入れられた回答では、の実装は次のstrdupように提示されます。

ptr2 = malloc(strlen(ptr1)+1);
strcpy(ptr2,ptr1);

strlenただし、との両方strcpyが各文字が\0.

使用memcpyするとより効率的になります。

char *strdup(const char *src) {
    size_t len = strlen(src) + 1;
    char *s = malloc(len);
    if (s == NULL)
        return NULL;
    return (char *)memcpy(s, src, len);
}
于 2016-06-25T22:01:11.830 に答える
0

char *strdup(char *pszSrch);

strdup元の文字列のサイズのストレージを割り当てます。ストレージの割り当てが成功すると、元の文字列が複製文字列にコピーされます。

strdupdNULL失敗した場合に戻ります。メモリが割り当てられていない場合、コピーは失敗しstrdupて戻りNULLます。

于 2014-02-07T04:52:54.403 に答える