2.30模型字符串拷贝
【注:本程序验证是使用vs2013版】
#include <stdio.h> #include <stdlib.h> #include <string.h> #pragma warning(disable:4996) /*字符串拷贝函数,逐渐接近计算机操纵的方式来循序渐进的*/ void my_strcpy(char *dest, char *src){ int i; for (i = 0; *(src + i) != '\0'; i++){ *(dest + i) = *(src + i); } *(dest + i) = 0; } void my_strcpy2(char *dest, char *src){ while (*src != 0){ *dest = *src; dest++; src++; } *dest = 0; } void my_strcpy3(char *dest, char *src){ while (*src != 0){ *dest++ = *src++; //先用了* 再加 (跟i++ ++i类似) } *dest = 0; } /*推荐方式*/ int my_strcpy4(char *dest, char *src){ char *to = dest;//这里是否需要定义成全局变量?或者静态变量?不清楚 char *from = src; if (to == NULL || from == NULL){ return -1; } while (*to++ = *from++){//这里实际包含三部 *desr = *src、 dest++,src++、 判断*from是否为0,为0跳出循环 NULL; } return 0; } int main(void){ char str[] = "abcde"; char buf[50]; int ret = 0; my_strcpy(buf, str);//方式一 printf("buf1 = %s\n", buf);
my_strcpy2(buf, str);//方式二 printf("buf2 = %s\n", buf);
my_strcpy3(buf, str);//方式三 printf("buf3 = %s\n", buf);
/* 这里是推荐的字符串拷贝方法,注意: 1.判断形参指针是否为空(有返回值) 2.最好不要直接使用形参,内部定义一个变量(通过辅助变量将形参接过来) */ ret = my_strcpy4(buf, str);//推荐方式 if (ret != 0) { printf("my_strcpy4 err:%d", ret); return; } printf("buf4 = %s\n", buf);
printf("\n"); system("pause"); return 0; }