strcpy函数实现

来源:互联网 发布:手机棋牌游戏平台知乎 编辑:程序博客网 时间:2024/06/07 09:48

  要求:不使用c++/c的字符串库函数,实现strcpy函数

最易想到的方法:

void my_strcpy(char *dest, char *src){    while (*src != '\0')    {        *dest++ = *src++;    }    *dest = *src;         //'\0'拷贝过去}

由此可见此代码还可进行简单优化:

void my_strcpy(char *dest, char *src){    while (*dest++ = *src++)    {        ;    }}

若传入一个空指针,那么编译程序崩溃,*dest++解引用失败,优化方案如下:

void my_strcpy(char *dest, char *src){    if (dest == NULL || src == NULL)    {        return;    }    while (*dest++ = *src++)    {        ;    }}

此时发现每次都要判断dest,src是否为空,降低了效率;并且strcpy函数的返回类型是char*,对此还可再次优化:

char* my_strcpy(char *dest,const char *src){    char *ret = dest;    assert(dest != 0);    assert(src != 0);    while (*dest++ = *src++)    {        ;    }    return ret;}

至此做到这一步代码基本没问题了

最后加上一个测试代码,完成strcpy函数的实现

int main(){    char buf[10] = { 0 };    char *p = buf;      //char *p = NULL;    my_strcpy(p, "hehe");    printf("%s\n", buf);    system("pause");    return 0;}

注意:在使用assert函数时应引用相应头文件#include<stdio.h>

原创粉丝点击