首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >strcpy vs strdup

strcpy vs strdup
EN

Stack Overflow用户
提问于 2012-12-24 18:53:51
回答 3查看 78K关注 0票数 80

我了解到strcpy用于复制字符串,而strdup返回一个指向新字符串的指针来复制该字符串。

您能解释一下在哪些情况下更喜欢使用strcpy吗?在哪些情况下您更喜欢使用strdup

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-24 19:51:50

strcpy(ptr2, ptr1)等同于while(*ptr2++ = *ptr1++)

其中,as strdup等同于

代码语言:javascript
复制
ptr2 = malloc(strlen(ptr1)+1);
strcpy(ptr2,ptr1);

(memcpy version可能更有效率)

因此,如果您希望将复制的字符串用于另一个函数(因为它是在heap部分中创建的),则可以使用strdup,否则strcpy就足够了。

票数 112
EN

Stack Overflow用户

发布于 2016-06-26 06:01:12

accepted answer中,strdup的实现如下所示:

代码语言:javascript
复制
ptr2 = malloc(strlen(ptr1)+1);
strcpy(ptr2,ptr1);

但是,这在一定程度上不是最优的,因为strlenstrcpy都需要通过检查每个字符是否为\0来查找字符串的长度。

使用memcpy应该更有效率:

代码语言:javascript
复制
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);
}
票数 14
EN

Stack Overflow用户

发布于 2014-02-07 12:52:54

char *strdup(char *pszSrch)

strdup将按原始字符串的大小分配存储空间。如果存储分配成功,则将原始字符串复制到复制字符串中。

strdup%d在失败时返回NULL。如果未分配内存,则copy strdup失败并返回NULL

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14020380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档