• strcpy函数


    不调用C/C++库函数,编写strcpy()函数。

    char * my_strcpy(char *strDest,const char *strSrc)
    {
        char *p=strDest;
        while(*strSrc)
        {
            *strDest++=*strSrc++;
        }
        *strDest='';
        return p;
    }

    虽然这个函数很容易写出来,但是在调用 my_strcpy时,常常由于内存问题,执行时报错。error1,error2,error3都是被犯过的错误。

    #include<iostream>
    using namespace std;
    char * my_strcpy(char *strDest,const char *strSrc);
    void Display(char *p);
    void error1();
    void error2();
    void error3();
    void correct1();
    void correct2();
    void correct3();
    int main(void)
    {
        correct1();
        correct2();
        correct3();
        getchar();
    }
    char * my_strcpy(char *strDest,const char *strSrc)
    {
        char *p=strDest;
        while(*strSrc)
        {
            *strDest++=*strSrc++;
        }
        *strDest='';
        return p;
    }
    void Display(char *p)
    {
        while(*p)
        {
            cout<<*p++;
        }
        cout<<endl;
    }
    void error1()
    {
        char *src="I Love China";
        //这里的dest仅仅只是一个指针,没有分配内存,运行时报错。
        char *dest;
        my_strcpy(dest,src);
        Display(dest);
    }
    void error2()
    {
        char *src="I Love China";
        //还是运行报错,还是没有给dest分配内存,仅仅只是dest指针指向一个常量
        char *dest="I Love Shanghai";
        my_strcpy(dest,src);
        Display(dest);
    }
    void error3()
    {
        char src[]="123456789";
        char dest[]="123"; /*dest[]数组不够长,数组越界*/
         my_strcpy(dest,src);
         Display(dest);
    }
    void correct1()
    {
         char *src="I Love China";
         //使用 new 进行动态内存分配,strlen测得的长度不包括‘’
         char *dest=new char[strlen(src)+1];
         my_strcpy(dest,src);
        Display(dest);
        delete(dest);
    }
    void correct2()
    {
        char *src="I Love China";
        char *dest="I Love Shanghai";
        //使用malloc 为dest分配内存
        dest=(char*)malloc(strlen(src)*sizeof(char)+1);
        my_strcpy(dest,src);
        Display(dest);
        free(dest);
    }
    void correct3()
    {
        char src[]="123456789";
        char dest[11]="123";
         my_strcpy(dest,src);
         Display(dest);
    }
  • 相关阅读:
    驼峰命名法
    Java中有关Null的9件事
    java开发中JDBC连接数据库代码和步骤
    TestNG 与 Junit的比较
    洛谷 P1880 [NOI1995]石子合并(区间dp,断环为链)
    洛谷 P1901 发射站(单调栈)
    洛谷 P2947 [USACO09MAR]向右看齐Look Up(单调栈)
    洛谷 P2629 好消息,坏消息(前缀和,单调队列,断环为链)
    洛谷 P3810 【模板】三维偏序(陌上花开)(CDQ分治)
    洛谷 CF429D Tricky Function(平面最近点对,分治)
  • 原文地址:https://www.cnblogs.com/qianwen/p/3827020.html
Copyright © 2020-2023  润新知