| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2133 人关注过本帖
标题:strdup() 函数的存在有什么意义吗
只看楼主 加入收藏
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏
已结贴  问题点数:20 回复次数:14 
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
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:20 
这个函数的存在意义就是

比如

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

2012-08-11 21:19
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用Devil_W在2012-8-11 21:19:53的发言:

这个函数的存在意义就是

比如

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

这个时候,

char *p = fun()
的时候,p是要free的。
2012-08-11 21:21
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
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
儒子科教
2012-08-11 21:41
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
虽然不是 C 语言标准的一部分。但不能说不是任何 C 标准的一部分:凡是服从 POSIX.1-2001 标准(又称 SUSv3 标准) 的系统,必须提供 strdup 这个函数。

从某些角度看,它比 strcpy 安全。但需要记得自己释放内存。说白了就是先分配再拷贝这种事干的比较频繁,因此就有了这个函数存在的意义。
2012-08-11 23:19
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
水古奇影
Rank: 2
等 级:论坛游民
帖 子:16
专家分:78
注 册:2011-5-16
收藏
得分:0 
调用void *malloc(..)函数之后最好都是判断一下内存的分配情况的,有了这个函数更加方便了
2012-08-12 08:01
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
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用madfrogme在2012-8-12 06:38:51的发言:

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

你这么一说,我就又开始怀疑,你是不是真的懂了。
2012-08-12 22:30
快速回复:strdup() 函数的存在有什么意义吗
数据加载中...
 
   



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

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