我了解到strcpy
用于复制字符串,而strdup
返回一个指向新字符串的指针来复制该字符串。
您能解释一下在哪些情况下更喜欢使用strcpy
吗?在哪些情况下您更喜欢使用strdup
吗
发布于 2012-12-24 19:51:50
strcpy(ptr2, ptr1)
等同于while(*ptr2++ = *ptr1++)
其中,as strdup等同于
ptr2 = malloc(strlen(ptr1)+1);
strcpy(ptr2,ptr1);
(memcpy version可能更有效率)
因此,如果您希望将复制的字符串用于另一个函数(因为它是在heap部分中创建的),则可以使用strdup,否则strcpy就足够了。
发布于 2016-06-26 06:01:12
在accepted answer中,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);
}
发布于 2014-02-07 12:52:54
char *strdup(char *pszSrch)
;
strdup
将按原始字符串的大小分配存储空间。如果存储分配成功,则将原始字符串复制到复制字符串中。
strdup
%d在失败时返回NULL
。如果未分配内存,则copy strdup
失败并返回NULL
。
https://stackoverflow.com/questions/14020380
复制相似问题