编程实现strcpy函数

来源:互联网 发布:java游戏开发 编辑:程序博客网 时间:2024/05/12 12:02

http://hi.baidu.com/tangsu2009/item/14748bd3a49073362b35c7f4



已知strcpy函数的原型是:
char * strcpy(char * strDest,const char * strSrc);
(1)不调用库函数,实现strcpy函数。
(2)解释为什么要返回char *。


代码如下:
1         #include <stdio.h>
2
3       char * strcpy(char * strDest, const char * strSrc) // 实现strSrc到strDest的拷贝
4       {
5                if ((strDest == NULL) || (strSrc == NULL)) //判断参数strDest和strSrc的有效性
6                {
7                         return NULL;
8                }
9                char *strDestCopy = strDest;        //保存目标字符串的首地址
10              while ((*strDest++ = *strSrc++)!='\0'); //把strSrc字符串的内容拷贝到strDest下
11    
12              return strDestCopy;
13     }
14    
15     int getStrLen(const char *strSrc)         //实现获取strSrc字符串的长度
16     {
17              int len = 0; //保存长度
18              while(*strSrc++ != '\0')              //循环直到遇见结束符’\0’为止
19              {
20                       len++;
21              }
22    
23              return len;
24     };
25    
26     int main()
27     {
28              char strSrc[] = "Hello World!";       //要被拷贝的源字符串
29              char strDest[20];                   //要拷贝到的目的字符数组
30              int len = 0;                      //保存目的字符数组中字符串的长度
31             
32              len = getStrLen(strcpy(strDest, strSrc)); //链式表达式,先拷贝后计算长度
33              printf("strDest: %s\n", strDest);
34              printf("Length of strDest: %d\n", len);
35    
36              return 0;
37     }

     
(1)strcpy函数的实现说明:
      代码5~7行判断传入的参数strDest和strSrc是否为NULL,如果是则返回NULL。
      代码第9行把strDest的值保存到strDestCopy。
      代码第10行对strSrc和strDest两个指针作循环移动,并不断把复制strSrc内存的值到strDest内存中。
      由于第(2)步中保存了strDest的值,因此这里只需返回strDestCopy,那么函数调用完后返回的就是strDest的值。

(2)为什么strcpy函数要返回char *类型呢?这是为了能使用链式表达式。由于在strcpy中使用了char *返回类型,因此在代码32行中可以通过这种链式表达式来同时做两个操作。首先调用strcpy使得strDest复制了strSrc指向的内存数据,然后调用getStrLen函数获取strDest字符串的长度。这样不仅调用方便,而且程序结构简洁明了。程序的输出结果如下:
1      strDest: Hello World!
2       Length of strDest: 12


原创粉丝点击