今天自己在实现strcpy功能时,遇到一个问题,老实显示出现乱码:有问题代码如下:
#include<stdio.h> char * strcpy(char *to, const char *from) { char *save = to; while(*from) { *save = *from; ++save; ++from; } // return save; return to; } int main() { char c[20]; char * s = "hello,world!" ; strcpy(c,s); printf("%s\n",c); return 0; }
运行结果:
hello,world! (�"
有C开发经验者一眼就能发现问题所在,而我是对比看了再看才找出问题所在,while循环退出时,save指针指向的字符串数组没有结束符'\0',导致输出结果乱码出现。
知道原因所在,解决起来就简单了,多种方法:
while((*save = *from)) { ++save; ++from; } 或者: while(*from) { *save = *from; ++save; ++from; } *save = '\0';
现在再用其他实现方式来看看,如下:
/*标准的方法之一*/ char * strcpy(char *to, const char *from) { char *save = to; for (; (*to = *from) != '\0'; ++from, ++to); return(save); } char * strcpy1(char *to, const char *from) { int i; for(i=0;(to[i]=from[i]);i++); return to; } char * strcpy2(char *to, const char *from) { char * save = to; while((*to++ = *from++) != '\0'); return save; }
参考网址:
http://bbs.csdn.net/topics/380186525?page=1#post-395300825