字符串经典案例之一(字符串的copy)

xiaoxiao2021-02-28  98

1、初级程序

int main04() { char a[] = "i am a student"; char b[64]; int i = 0; for(int i = 0; *(a+i) !='\0'; i++) { *(b+i) = *(a+i); } //'\0'并没有copy到b中 b[i] = '\0';//重要 printf("a:%s \n",a); printf("b:%s \n",b); printf("Hello world!\n"); system("pause"); return 0; }

2、接口的封装及优化

2.1 方法一

//定义接口 //方法一 void copy_str21(char *from, char *to) { for(; *from != '\0'; from++, to++) { *to = *from; } *to = '\0';//重要 手工补‘\0’ return; }

2.2 方法二

//方法二 优化 void copy_str22(char *from, char *to) { //++的优先级更高 for(;*from != '\0';) { *to++ = *from++;//相当于 先*to = *from 再from++ to** } *to = '\0';//重要 手工补‘\0’ return; }

2.3 方法三

//方法三 优化 void copy_str23(char *from, char *to) { while((*to = *from) != '\0')//字符copy后不为0 { from ++; to ++; } //循环到最后‘\0’已经加到to里面,所以不需要手工加'\0' }

2.4 方法四

//方法四 优化 void copy_str24(char *from, char *to) { while((*to++ = *from++) != '\0') { ; } }

2.5 方法五

//方法五 优化 void copy_str25(char *from, char *to) { while((*to++ = *from++)) { ; } }

2.5_、方法五的引申

void copy_str25_error(char *from, char *to) { while((*to++ = *from++)) { ; } printf("from:%s \n",from);//此时from指向字符串的最后位置“\0”,所以打印不出字符串 }

2.6、方法六 辅助指针变量的重要性及错误检测

//方法六 优化 //辅助指针变量 不轻易改变形参的值,用辅助变量把形参接过来 int copy_str26(char *from, char *to) { char *tmpfrom = from; char *tmpto = to; if(tmpfrom == NULL || tmpto == NULL) { return -1; } while(*tmpto++ = *tmpfrom++); printf("from:%s \n",from); }

main 函数一

int main() { char *from = "abcdefg"; char buf2[100]; // copy_str21(from,buf2); // copy_str22(from,buf2); // copy_str23(from,buf2); // copy_str24(from,buf2); copy_str25(from,buf2); printf("from:%s \n",from); printf("buf2:%s \n",buf2); printf("Hello world!\n"); system("pause"); return 0; }

main函数二 初始化指针最好分配内存

//错误案例 int main06() { char *from = "abcdefg"; char buf2[100]; int ret = 0; //错误案例 // { // // //相当于*(0) = 'a' 不能修改特殊空间 // char *myto = NULL;// 因此必须分配内存空间 没有内存就没有指针 // copy_str21(from,myto);// error // } { char *myto = NULL;//必须分配内存 ret = copy_str26(from,myto); if(ret != 0) { printf("func copy_str26 error:%d \n",ret); return ret; } } printf("Hello world!\n"); system("pause"); return ret; }

main函数三  赋值指针的重要性

//引入辅助指针变量的重要性 int main() { char *from = "abcdefg"; char buf2[100]; int ret = 0; printf("copy_str25_error begin!\n"); //copy_str25_error(from,buf2);// 不能打印任何值 copy_str26(from,buf2); printf("copy_str25_error end! \n"); printf("Hello world!\n"); system("pause"); return ret; }

转载请注明原文地址: https://www.6miu.com/read-29988.html

最新回复(0)