字符串的复制

不用库函数,自己编写一个字符串复制函数。

 1  //Version 1
 2 1 char * mystrcpy(char * dest, const char * src)
 3  2 {
 4  3     char *d = dest;
 5  4 
 6  5     assert((dest != NULL) && (src != NULL));
 7  6     while(*src != '')
 8  7         *d++ = *src++;
 9  8     *d = '';                              //it is important.
10  9     return dest;
11 10 }
 1 //Version 2
 2 char * mystrcpy(char * dest, const char * src)
 3 {
 4     char *d = dest;
 5     int count;
 6 
 7     count = strlen(src) + 1;
 8     assert((dest != NULL) && (src != NULL));
 9     while(count--)
10         *d++ = *src++;
11     return dest;
12 }

但是千万注意,上述代码并不完整,只适用于以下图1和2的情况。

而对于图3的情况使用上面的代码会产生覆盖的现象,可以采用从后往前复制的方法,完整的代码如下:

 1 char * mystrcpy(char * dest, const char * src)
 2 {
 3     char * d = dest;
 4     char * s = src;
 5     int count;
 6 
 7     assert((dest != NULL) && (src != NULL));
 8     count = strlen(src) + 1;
 9 
10     if(dest < src || dest > src+count)
11     {
12         while(count--)
13             *dest++ = *src++;
14     }
15     else
16     {
17         d = dest + count;
18         s = src + count;
19 
20         while(count--)
21             *d-- = *s--;
22     }
23     return d;
24 }
原文地址:https://www.cnblogs.com/philospy/p/4141444.html