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 }
时间: 2024-10-14 10:41:34