赞
踩
方法一:常规循环
把from字符串复制在buf2中,有一点注意,buf2一定要先申请内存。
下面几个方法中都遵循一个原则,就是不改变形参的地址值,重新在栈中申请一个两个指针变量,不断地指向常量区中的新地址。
void copy_str_way1(char *myfrom, char *myto) { char *from = myfrom; char *to = myto; int i = 0; for (i = 0; *(from+i) != '\0'; i++) { *(to + i) = *(from + i); } // 由于最后一个字符'\0'没有赋给to,所以把'\0'赋值给to+i *(to + i) = '\0'; } void copy_str_way2(char *myfrom, char *myto) { char *from = myfrom; char *to = myto; for (; *from != '\0'; from++,to++) { *to = *from; } // 由于最后一个字符'\0'没有赋给to,所以把'\0'赋值给to+i *to = '\0'; } // 把方式2中for里的++写在外边 void copy_str_way3(char *myfrom, char *myto) { char *from = myfrom; char *to = myto; for (; *from != '\0'; ) { *to++ = *from++; // 这里运算符优先级,++一级,*二级 } // 由于最后一个字符'\0'没有赋给to,所以把'\0'赋值给to+i *to = '\0'; } // 方式4,5,6用while方式实现 void copy_str_way4(char *myfrom, char *myto) { char *from = myfrom; char *to = myto; while ((*to = *from) != '\0') { from++; to++; } // 由于最后一个字符'\0'没有赋给to,所以把'\0'赋值给to+i *to = '\0'; } // 这种方式不用为最后一个字符赋值'\0' void copy_str_way5(char *myfrom, char *myto) { char *from = myfrom; char *to = myto; int i = 0; while ((*to++ = *from++)) { printf("%d\n", i); } // // *to = '\0'; } int main() { char *from = "abcde"; // char to[200]; // copy_str_way1(from, to); copy_str_way5(from, to); printf("%s", to); printf("copy_str25_err end\n"); return 0; }
最后是方式1的内存图,其他的几种方式也类似。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。