码迷,mamicode.com
首页 > 其他好文 > 详细

strcpy的实现

时间:2015-08-20 22:19:14      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

 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 }

 

strcpy的实现

标签:

原文地址:http://www.cnblogs.com/masterlibin/p/4746284.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!