strcpy函数

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

char * my_strcpy(char *strDest,const char *strSrc)
{
    char *p=strDest;
    while(*strSrc)
    {
        *strDest++=*strSrc++;
    }
    *strDest='\0';
    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='\0';
    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测得的长度不包括‘\0’
     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);
}

 

posted @ 2014-07-06 13:47  北门吹风  阅读(1020)  评论(0编辑  收藏  举报