免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2003-08-13 19:55 |只看该作者

出现频率最高的笔试题strcpy写法

呵呵,CSDN上的

  1. /* the emplementation in VC++ */
  2. char* strcpy(char* dest, const char* src)
  3. {
  4.         char* tmp = dest;
  5.        
  6.         while (*tmp++ = *src++)
  7.                 ;
  8.        
  9.         return dest;
  10. }

  11. /* the emplementation in Linux */
  12. char* strcpy(char* dest, const char* src)
  13. {
  14.         char* tmp = dest;

  15.         while ((*tmp++ = *src++) != '\0')
  16.                 ;

  17.         return dest;
  18. }
复制代码
ldzyg 该用户已被删除
12 [报告]
发表于 2003-08-22 00:46 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
13 [报告]
发表于 2003-08-23 01:23 |只看该作者

出现频率最高的笔试题strcpy写法

[quote]原帖由 "Joran"][/quote 发表:
   
引用有错误,贴这种教课书式的代码,还是得严谨些。
Linux 下的定义是这样的:
/usr/lib/string.h

  1. string.h:
  2. char *strcpy (char *__restrict __dest, __const char *__restrict __src)
  3.      __THROW;
复制代码

/usr/src/linux-2.6.0-test3/lib/string.c

  1. /**
  2. * strcpy - Copy a %NUL terminated string
  3. * @dest: Where to copy the string to
  4. * @src: Where to copy the string from
  5. */
  6. char * strcpy(char * dest,const char *src)
  7. {
  8.         char *tmp = dest;

  9.         while ((*dest++ = *src++) != '\0')
  10.                 /* nothing */;
  11.         return tmp;
  12. }
复制代码

在 string.h 中有 __THROW 这个宏,我们来查看一下在哪里定义的:
$ grep __THROW /usr/include/*.h |grep define

  1. ...
  2. usr/include/malloc.h:#  define __THROW throw ()
  3. ...
复制代码

而且几乎每个预处理指令都由 __THROW 来处理,可以这样查看:
$ grep -R __THROW /usr/include/* | grep "#"

linux 里的和高质量C/C++ 里的其实是一样的,除了异常处理哪里稍不同而已。

论坛徽章:
0
14 [报告]
发表于 2003-09-11 11:04 |只看该作者

出现频率最高的笔试题strcpy写法

原帖由 "HopeCao" 发表:
);
    返回strSrc的原始值是错误的。其一,源字符串肯定是已知的,返回它没有意义。其二,不能支持形如第二例的表达式。其三,为了保护源字符串,形参用const限定strSrc所指的内容,把const char *作为char *返回?.........

论坛徽章:
0
15 [报告]
发表于 2008-09-27 11:12 |只看该作者
很好,很强大

论坛徽章:
0
16 [报告]
发表于 2008-09-27 11:12 |只看该作者
很好,很强大

论坛徽章:
0
17 [报告]
发表于 2008-09-27 11:31 |只看该作者
lz還忘了一種情況:destination和source的內存區有重疊怎么辦?

[ 本帖最后由 fera 于 2008-9-27 12:24 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2008-09-27 11:43 |只看该作者
    (C)检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的 0)会减少程序的可维护性。0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用 NULL代替0,如果出现拼写错误,编译器就会检查出来。


Bjarne Stroustrup特意强调在c++里应当用0,而非NULL。

5.8 Advice [ptr.advice]
[3] Use0 rather than N U L L ; §5.1.1.

论坛徽章:
0
19 [报告]
发表于 2008-09-27 11:56 |只看该作者
/**
* strcpy - Copy a %NUL terminated string
* @dest: Where to copy the string to
* @src: Where to copy the string from
*/

char * strcpy(char * dest,const char *src)
{
        char *tmp = dest;

        while ((*dest++ = *src++) != '\0')
                /* nothing */;
        return tmp;
}


这个贴子也能反映出,写搞质量C/C++的人在一知半解的情况下,自我感觉却非常良好。吐血的是还要出来误人子弟

论坛徽章:
0
20 [报告]
发表于 2008-09-27 12:01 |只看该作者

此贴收藏了呵呵

谢谢了啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP