strcpy文字列をコピーするためのものであると読みstrdup、文字列を複製するために新しい文字列へのポインタを返します。
strcpyどのケースを使用したいのか、どのケースを使用したいのか説明してくださいstrdup。
strcpy(ptr2, ptr1)と同等ですwhile(*ptr2++ = *ptr1++)
ここで、strdupはと同等です
ptr2 = malloc(strlen(ptr1)+1);
strcpy(ptr2,ptr1);
(memcpyバージョンの方が効率的かもしれません)
したがって、コピーした文字列を別の関数で使用する場合(ヒープセクションで作成されるため)、strdupを使用できます。それ以外の場合は、strcpyで十分です。
strdupヒープ上の新しい文字列にメモリを割り当てますが、strcpy(またはそのより安全なバリアント)を使用している間、ヒープまたはスタックstrncpyの事前に割り当てられたメモリに文字列をコピーできます。
受け入れられた回答では、の実装は次の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);
}
char *strdup(char *pszSrch);
strdup元の文字列のサイズのストレージを割り当てます。ストレージの割り当てが成功すると、元の文字列が複製文字列にコピーされます。
strdupdNULL失敗した場合に戻ります。メモリが割り当てられていない場合、コピーは失敗しstrdupて戻りNULLます。