| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2133 人关注过本帖
标题:strdup() 函数的存在有什么意义吗
取消只看楼主 加入收藏
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏
已结贴  问题点数:20 回复次数:5 
strdup() 函数的存在有什么意义吗
strdup() 函数应该不是任何C标准的一部分,它的存在有什么意义吗

strdup() 应该可以写成如下形式吧

char *strdup (const char *s) {
    char *d = malloc (strlen (s) + 1);   // 分配内存
    if (d != NULL)
        strcpy (d,s);                    // 复制字符串
    return d;                            // 返回指针
}

如果内存分配失败, malloc 把errno设定为 ENOMEM

可是我想知道这个函数存在的意义,更安全的复制字符串?
搜索更多相关主题的帖子: 内存 return 字符串 
2012-08-11 21:14
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
以下是引用Devil_W在2012-8-11 22:21:26的发言:


这个时候,

char *p = fun()
的时候,p是要free的。

感觉好像明白了,非常感谢

The quieter you become, the more you can hear
2012-08-11 21:28
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
以下是引用pangding在2012-8-12 00:19:24的发言:

虽然不是 C 语言标准的一部分。但不能说不是任何 C 标准的一部分:凡是服从 POSIX.1-2001 标准(又称 SUSv3 标准) 的系统,必须提供 strdup 这个函数。

从某些角度看,它比 strcpy 安全。但需要记得自己释放内存。说白了就是先分配再拷贝这种事干的比较频繁,因此就有了这个函数存在的意义。

谢谢斑竹的解释,感觉清晰很多了

The quieter you become, the more you can hear
2012-08-12 06:38
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 8楼 水古奇影
谢谢

The quieter you become, the more you can hear
2012-08-12 10:03
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
以下是引用Devil_W在2012-8-12 23:30:48的发言:


你这么一说,我就又开始怀疑,你是不是真的懂了。

以你
const char * fun()
{
    ...
    char * p="aaaa"
    return p;  // 这个时候最好用strdup, 而不是直接把p传出去, 这么做 可以保证安全。
}

这个例子,也就是数说fun() 返回一个指向字符串的指针 p 时,最好strdup(p) 一下, 为aaaa 再分配几个字节,然后把aaaa复制过去,

然后返回新的指针, 最后用完之后free。 至于说可以保证安全,那应该是相对strcpy来说的安全吧,请问这个安全具体是指??

The quieter you become, the more you can hear
2012-08-12 23:45
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
以下是引用Devil_W在2012-8-13 00:54:39的发言:



我以为你真的明白了的。

其实所有的精髓 就在安全 这两个字里面。


好吧,我相信这里的安全是指:首先算一下需要多少字节存储字符串,确实分配到内存之后,再复制

如果大神不点明,我的理解只能停在这一步了,不过感觉应该就是这么回事了

The quieter you become, the more you can hear
2012-08-13 00:14
快速回复:strdup() 函数的存在有什么意义吗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030270 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved