免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2480 | 回复: 7
打印 上一主题 下一主题

为什么在strncat,strncpy之前,不先比较源串和目的串的长度 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-04 17:21 |只看该作者 |倒序浏览
strncat,strncpy,虽然可以采用以下方式确保不产生缓冲区溢出,
但源串比目的串长的话,不能能把源串整个拷入,不知为何进行拷贝之前,不先判断一下源串,目的串的大小。
如果目的串比源串大,才进行拷贝。

比如
strncpy(path, homedir,
sizeof(path) - 1);
path[sizeof(path) - 1] = '\ 0';
strncat(path, "/",
sizeof(path) - strlen(path) - 1);
strncat(path, ".foorc",
sizeof(path) - strlen(path) - 1);
len = strlen(path);

如果不能保证所有的数据都拷入目的串,这样的拷贝有意义么。

[ 本帖最后由 wlia 于 2009-8-4 17:22 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-08-04 17:37 |只看该作者

回复 #1 wlia 的帖子

你可以先拷贝,再比较是否拷贝完全~ 这样,不管拷贝是否完全,都只需要对字符串进行一次遍历。

如果非要先比较的话,那么如果能够拷贝完全,则要对字符串遍历两次(一次是算长度,一次是拷贝)。

论坛徽章:
0
3 [报告]
发表于 2009-08-05 08:47 |只看该作者
检查参数代价高。
留给调用的人自己检查。

论坛徽章:
0
4 [报告]
发表于 2009-08-05 08:55 |只看该作者
很强大,当初玩儿Java出身的那个S*就让我写的函数都判断参数,这就是为什么Java程序员比C程序员厉害的原因。

论坛徽章:
0
5 [报告]
发表于 2009-08-05 10:05 |只看该作者
目的串就一指针,很可能里面还是随机数,怎么能知道他的大小?

论坛徽章:
0
6 [报告]
发表于 2009-08-05 10:08 |只看该作者
这就是为什么C具有灵活性了

论坛徽章:
0
7 [报告]
发表于 2009-08-05 10:41 |只看该作者
原帖由 prolj 于 2009-8-5 08:55 发表
很强大,当初玩儿Java出身的那个S*就让我写的函数都判断参数,这就是为什么Java程序员比C程序员厉害的原因。


这位阿姨对java很有成见啊
哎。。。我身边都是搞JAVA的,天天谈概念。
什么XX云计算,其实啥都不懂。

他们的职位都是:架构师

论坛徽章:
0
8 [报告]
发表于 2009-08-05 14:27 |只看该作者

回复 #7 shuchi91 的帖子

哈哈哈哈哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP