关闭

C语言:模拟实现strcpy

61人阅读 评论(0) 收藏 举报
分类:

模拟实现strcpy:
     (1)字符串拷贝函数就是将原串拷贝到新串,而原串无需变换,可以用const来修饰。包括‘\0’全部拷贝到新的子串dest。


     (2)while ((*dest++ = *src++) )
         {
           ;
         }

     这种遍历程序连同‘\0’一起拷贝了while ((*dest++ = *src++) )相当于while ((*dest++ = *src++) !=‘\0’),上一次拷贝到最后一个字符时后置加加,将src变为‘\0’了,而下次再进入while循环时先执行*dest++ = *src++,dest也拷贝为‘\0’.而此时不满足该条件跳出while循环。但是此时已经拷贝了'\0'了。这也是程序的先后性。
       或者可以:while (*src)
        {
            *dest = *src;
            dest++;
            src++;
        }
     原串为‘\0’时跳出,并未拷贝‘\0’,要赋值*dest = '\0',需要赋值 *dest = '\0'。
     其实对于以上两种方法均可都执行*dest = '\0'操作,即使赋值过再赋值也无妨。


     (3)另外要说的一点是:自加有副作用,因此return dest 可能读到最后'\0'就不输出了。因此需要定义新变量来保存首地址
char *ret = dest以便返回。


代码如下:



#include<stdio.h>
#include<stdlib.h>
#include<assert.h>


char* my_strcpy(char* dest, const char* src) //const使在函数中不能修改*src原先的值  
{
    assert(dest);    //两次断言-->检验参数,增加代码健壮性  
    assert(src);
    char* strdest = dest;    //保存原始指针地址
    while (*src)
    {
        *dest++ = *src++;
    }
    *dest = '\0';
    return strdest;
}


int main()
{
    char arr1[] = "hello world!";
    char arr2[20] ;
    char* ret = my_strcpy(arr2, arr1);
    printf("%s", ret);
    system("pause");
    return 0;
}


本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1714516

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:49212次
    • 积分:603
    • 等级:
    • 排名:千里之外
    • 原创:174篇
    • 转载:9篇
    • 译文:0篇
    • 评论:2条
    关于博主
    github:https://github.com/hanxiaojing Email: hanjing_1995@163.com 原51.cto: http://10740184.blog.51cto.com 欢迎来访~
    文章分类
    最新评论