关于strcpy函数的实现

来源:互联网 发布:java学生管理系统 编辑:程序博客网 时间:2024/05/17 02:27
char *strcpy(char *dest,const char *src){    size_t i = 0;    while((dest[i] = src[i]) != '\0')        i++;    return dest;}

将指针src指向的字符串复制到指针dest指向的位置;使用数组下标实现的版本

char *strcpy(char *dest,const char *src){    char *temp = dest;    while((*dest = *src) !='\0'){        dest++;        src++;    }    return temp;}

将指针src指向的字符串复制到指针dest指向的位置;使用指针方式实现的版本

因为参数是通过值传递的,所以在strcpy函数中可以以任何方式使用参数dest和src。在此,src和dest是方便进行了初始化的指针,循环每执行一次,它们就沿着相应的数组前进一个字符,知道将src中的结束符'\0'复制到s为止。

      实际上,strcpy函数并不会按照上面的这些方式编写。经验丰富的程序员跟喜欢将它编写成下列形式:

char *strcpy(char *dest,const char *src){    char *temp = dest;    while((*dest++ = *src++) != '\0')        ;    return temp;}

      在该版本中,dest和src的自增运算放到了循环的测试部分中。表达式*src++的值是执行自增运算之前src所指向的字符。后缀运算符++表示在读取该字符之后才改变src的值。同样的道理,在dest执行自增运算之前,字符就被存储到了指针dest指向的旧位置。该字符值同样也用来和空字符'\0'进行比较运算,以控制循环的执行。最后的结果依次将src指向的字符复制到dest指向的位置。直到遇到结束符'\0'为止(同时也复制该结束符)。

      为了进一步精炼程序,我们注意到,表达式同'\0'的比较是多余的,因为只需要判断表达式的值是否为0即可。因此,该函数可进一步写成下列形式:

char *strcpy(char *dest,const char *src){    char *temp = dest;    while(*dest++ = *src++)      ;    return temp;}
该函数初看起来不太容易理解,但这种表示方法是很有好处的。我们应该掌握这种方法,C语言程序中经常会采用这种写法。



0 0
原创粉丝点击