今天自己在实现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