【注:本程序验证是使用vs2013版】
#include#include #include #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;}