zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    hdu 5366 简单递推
    hdu 5365 判断正方形
    hdu 3635 并查集
    hdu 4497 数论
    hdu5419 Victor and Toys
    hdu5426 Rikka with Game
    poj2074 Line of Sight
    hdu5425 Rikka with Tree II
    hdu5424 Rikka with Graph II
    poj1009 Edge Detection
  • 原文地址:https://www.cnblogs.com/qianwen/p/3827020.html
Copyright © 2011-2022 走看看