如何写一个漂亮的strcpy函数

                   
    最近,一边忙着找实习和工作,一边慢慢地补充自己欠缺的专业知识,日子过得不算好也不算坏,只是有点心神不灵的感觉。昨天看了本叫做《程序员面试宝典》,是之前从旧书摊上淘来的,这一看发现了个有意思的东西:如何去写一个漂亮的strcpy函数?
    先man一下这个函数的原型(from Linux Programmer‘s Manual):
    SYNOPSIS:
    #include <string.h>
    char *strcpy(char *dest,const char *src);
    从这个函数原型就可以看到一个需要注意的地方:源字符串不能被修改,所以加上了const修饰符。
    接着便要想,如何实现将字符串从src复制到dest呢?
    以下是书上的代码:
1    char *strcpy(char *dest,const char *src)
2    {
3        char *dest_addr;
4        if( dest==NULL || src==NULL )
5        {
6            return NULL;
7        }
8        dest_addr=dest;
9        while( (*dest++=*src++)!='\0' );
10        return dest_addr;
11    }    
    可能很多写的话只会写第9句也就了事,我第一次写也只是写了第9句,不过没那么简洁。但是根据书上所说的,我们必须先检查指针的有效性。我们传给函数的指针很可能是无效的指针,如果不检查,很有可能导致程序的崩溃。在此处便可以看出一个程序员写的程序是否健壮。还有一点,为什么需要返回值呢?答曰:为了实现链式表达式。神马是链式表达式呢?假如,你想将已经得到src内容的dest的长度传给某一个变量,如果strcpy没有dest首地的返回值,程序必须这样写:
    int length;
    strcpy(dest,src);
    length=strlen(dest);
如果有利用返回值,程序就只需要一句话:int length=strlen(strcpy(dest,src));
这样的程序难道不是更简洁吗?

    其实,strcpy的实现函数有不同的写法,但是如何写好这么一个基本的字符串函数却不是一件简单的事情。你可能单单就区考虑功能性而去忽略健壮性,或者在函数原型上没有整体上的考虑(例如如何方便后来者调用等)。从这个函数上,我再次明白一句话:所思即所为。你大脑中如何去考虑一件事情,你写出来的程序也会是什么样。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值