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
元の文字列のサイズのストレージを割り当てます。ストレージの割り当てが成功すると、元の文字列が複製文字列にコピーされます。
strdup
dNULL
失敗した場合に戻ります。メモリが割り当てられていない場合、コピーは失敗しstrdup
て戻りNULL
ます。