免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: HopeCao
打印 上一主题 下一主题

出现频率最高的笔试题strcpy写法 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2008-09-27 14:00 |显示全部楼层
大家讨论的不错!
我的做法是把"benjiam"和"思一克"两位大拿的思想都拿过来放在一起互补, 根据实际情况决定在什么情况下用"benjiam"方法和什么情况下用"思一克"方法. 使两中方法相容起来(实际上目的是一样的,都是为了更好的解决问题).

论坛徽章:
0
2 [报告]
发表于 2008-09-27 14:34 |显示全部楼层
原帖由 思一克 于 2008-9-27 14:04 发表
实际上,直接CRASH是一个追求的最高目标. 可惜由于硬件软件,体系结构等限制, 远达不到.

比如,strcpy(d, s), 如果d是一个被free(d)的地址, 系统往往也能工作. 但这里实际是一个巨大的恶劣的BUG. 无法CRASH的原 ...


理解,容易复现的故障好找,不容易复现的鼓掌难找一些.
实际上就是如何找出问题,计算机的应用到了各种领域,其中出现了各种方式的解决问题的思想和方式,都是基于实际情况中的一些特性提出的,并经过反复的应用改进,直道相对满足实际的应用.
这写不同的思想的产生,都有他一定的道理在里面,甚至有些思想看上去会互相矛盾,但一落实到实际的场合中往往又是有效的.

论坛徽章:
0
3 [报告]
发表于 2008-09-27 14:39 |显示全部楼层
原帖由 benjiam 于 2008-9-27 13:55 发表


其实我也一直在反思这个问题。  发现参数错误了 到底是应该善意的返回一个错误码 还是应该不检查 crash 掉。

好像根本没有一个可循的案例。也没什么标准。因为在不同的层面上似乎有不同的处理方式。 内核 ...


debug阶段可以没有顾虑的crash, 但在一些crash会产生灾难性后果的场合(当然另外很多场合允许crash),就不能随意crash了.

论坛徽章:
0
4 [报告]
发表于 2008-09-27 20:52 |显示全部楼层
原帖由 ytl 于 2008-9-27 20:48 发表


其实2中方式都是合理的,问题的关键是接口的定义:接口约定为按第一种方式实现,那就返回错误码;接口约定为按第二种方式实现,那就由调用者保证参数的正确性。
作为几乎最底层api的strcpy, 显然应该采取第 ...


你的这句话很有道理:
其实2中方式都是合理的,问题的关键是接口的定义:接口约定为按第一种方式实现,那就返回错误码;接口约定为按第二种方式实现,那就由调用者保证参数的正确性。

论坛徽章:
0
5 [报告]
发表于 2008-09-27 20:56 |显示全部楼层

回复 #45 system888net 的帖子

而且两者是可以结合起来的.也就是CRASH和返回值可以在不同情况下结合起来用. 取其长而避其短.

论坛徽章:
0
6 [报告]
发表于 2008-09-27 21:01 |显示全部楼层
原帖由 ytl 于 2008-9-27 20:56 发表



可以这样简单的总结:对于一个系统的内部,应该尽可能由调用者保证参数的正确性;而对于系统与系统之间的接口,则实现者必须检查参数的有效性,应该力求作到对于任何输入,自己都不会crash。strcpy()是前 ...


good, 说的非常客观!

论坛徽章:
0
7 [报告]
发表于 2008-09-28 12:54 |显示全部楼层
我的理解是LZ的例子里并没有排斥crash, 就算做了判断也会有crash的情况发生,比如对于一个非法内存(它!=NULL),那么程序也无法判断其合法性. 感觉两种方法是"你中有我,我中有你",当然针对实际的具体情况时会有所侧重。

论坛徽章:
0
8 [报告]
发表于 2008-10-28 18:29 |显示全部楼层
1.  大家说的挺有道理.
2.  建议不要用"非左即右"的方式来看问题!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP