标题:Linux应聘常考题
只看楼主
冰心剑客
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-10-31
 问题点数:0 回复次数:3 
Linux应聘常考题

Linux应聘常考题: C中的strcpy()函数
很多公司用这个函数考察应聘者的一些技能,如代码风格、代码成熟度等。
首先要避免国内一些教科书的误导的诸如while(*dest++=*src++)这样的代码。
我把参考写法如下(纯C代码):
-----------------------------------------------------------------------------
000
001 # include
002
003 # define BOUNDS_VIOLATED (__builtin_trap (), 0)
004
005 # define CHECK_BOUNDS_LOW(ARG) \
006 (((__ptrvalue (ARG) < __ptrlow (ARG)) && BOUNDS_VIOLATED), \
007 __ptrvalue (ARG))
008
009 # define CHECK_BOUNDS_HIGH(ARG) \
010 (((__ptrvalue (ARG) > __ptrhigh (ARG)) && BOUNDS_VIOLATED), \
011 __ptrvalue (ARG))
012
013 /* copy src to dest */
014 char *
015 strcpy ( char *dest, const char *src)
016 {
017 register char c;
018 char *__unbounded s = (char *__unbounded) CHECK_BOUNDS_LOW (src);
019 const ptrdiff_t off = CHECK_BOUNDS_LOW (dest) - s - 1;
020 size_t n;
021 do {
022 c = *s++;
023 s[off] = c;
024 } while (c != '\0');
025 n = s - src;
026 (void) CHECK_BOUNDS_HIGH (src + n);
027 (void) CHECK_BOUNDS_HIGH (dest + n);
028 return dest;
029 }
030
要注意的有:
1、第003行宏调用的函数为指针越界陷阱系统调用(bounds check,即int $5);
2、第006行的‘&&’和‘,’符号在宏中的用法;
3、数据类型的定义,诸如ptrdiff_t, size_t等的使用;
4、第023的s指针为什么高效,如寄存器使用数量是最少的;
5、第026行为什么要返回void类型;
如果你这些都已经很熟悉了,我相信没有公司可以立即拒绝你。
有问题大家探讨,一起学习成长。

搜索更多相关主题的帖子: 常考题 Linux 应聘 
2007-11-01 22:01
zhixl
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-11-1
得分:0 
这个版面内容真有趣,呵呵,流连忘返了
2007-11-01 22:02
饕餮3943658
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-9-27
得分:0 
好东东
2007-11-01 22:19
wangyanfeng
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-10-28
得分:0 
不错啊
2007-11-01 23:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-182707-1-1.html




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

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