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);
    }
  • 相关阅读:
    Sencha touch 初体验
    Android开发——NDK开发入门
    Android开发——Activity(活动)的生命周期(上)
    Android开发——构建自定义组件【转】
    Android开发——使用Gallery实现“多级联动”
    Android开发——Android搜索框架(一)
    LINQ之路 6:延迟执行(Deferred Execution)
    .Net小笔记之.NET Framework的内容
    c#高级编程学习笔记之创建一个简化的链表类
    C#高级编程读书笔记之泛型的优点
  • 原文地址:https://www.cnblogs.com/qianwen/p/3827020.html
Copyright © 2011-2022 走看看