strcpy的实现

 1 //
 2 //  Strcpy.c
 3 //  libin
 4 //
 5 //  Created by 李宾 on 15/8/20.
 6 //  Copyright (c) 2015年 李宾. All rights reserved.
 7 //
 8 
 9 #include <stdio.h>
10 #include <assert.h>
11 #include <string.h>
12 /***********************************************不考虑覆盖*****************************************/
13 char * Strcpy1(char *dst, const char *src)//const 在*号左边,指的是指针所指向的内容为常量,不允许修改。
14 {
15     assert(dst != NULL && src != NULL);   //判断指针是否为空,条件为假,中断程序。
16    
17     char *ret = dst;
18     
19     while((*dst++ = *src++)!='\0');
20     
21     return ret;                        //返回dst是为了支持链式表达式。例如:int l=strlen(strcpy(strA,strB));
22 }
23 
24 
25 
26 /**********************************************考虑内存重叠******************************************/
27 char *my_memcpy(char *dst, const char* src, int len)
28 {
29     char * ret = dst;
30     int n = len + 1;
31     if (dst>=src && dst <= src+len)
32     {
33         dst = dst + len;
34         src = src + len;
35         while (n --)
36         {
37             *dst-- = *src--;
38         }
39     }
40     else
41         while (n--)
42         {
43             *dst++ = *src++;
44         }
45     return ret;
46         
47 }
48 
49 char * Strcpy2(char *dst, const char *src)
50 {
51     assert(dst!= NULL && src != NULL);
52     
53     char *ret = dst;
54     
55     my_memcpy(dst, src, (int)strlen(src));
56     
57     return ret;
58 }
59 
60 
61 
62 int main()
63 {
64     //char *a = "hello";                //含义是先新建一个字符串,内容是abcd 然后str1是一个头指针,指向这个串.
65     char a[6] = {'a','b','c','d','e'};  //但是这个新建串是作为const存在的,并不是一个可以编辑的变量
66     char b[6] = {'l','o','v','e','i'}; //因此,一旦你想更改其中的值,程序就会挂掉.
67     char *c;
68     //a = Strcpy1(a,b);   数组名是指针常量,不能赋值。
69     c = Strcpy1(a, b);
70     puts(c);
71     
72 }

 

posted @ 2015-08-20 21:18  32ddd  阅读(247)  评论(0)    收藏  举报