免费注册 查看新帖 |

Chinaunix

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

一道关于段错误笔试题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-06-11 09:44 |只看该作者
题目的意思简单的讲,就是不修改代码,而输出程序员想要输出的那个1。
所以,应该有很多办法:

比如 hellioncu (特别坏) 说的提高优化级别(优化级别提高,i直接被优化掉,printf中用常量了,就能输出1),这应该是可行的方法。

另外,我还想到一种方法,把strcpy定义成另外一个不会导致buffer溢出的函数就行了,比如:
gcc test.c -o test -Dstrcpy=strtok

Linux下测试通过。


不过这种面试题目有什么意思?能考察什么?

论坛徽章:
0
22 [报告]
发表于 2010-06-11 11:28 |只看该作者
回复 21# seaquester

题目不是简单的输出结果1, 且要预警,就是预防啦
本笔试题确实没什么意思,但那个公司的笔试又有意思呢,呵呵本人愚见,公司的笔试都这样

你提出的方法 gcc test.c -o test -Dstrcpy=strtok跟没本(8楼 (不成功),12楼(成功的好方法))的思想一样,都是在编译时
把不安全的函数替换成安全的,但是你这种虽然结果对了,但是没有预警提示。

总结了下高手们提供的方法:
    一种方法:12楼的方法 我测试了 ok,有预警提示,且不变动源码
    二种方法:20楼和21楼提出的 提高优化级别,把int优化为register int(测试了下优化级别为3就可以呢), 有预警提示,且不变动源码

不知道还有没有别的方法呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP