strcpy函数

strcpy函数,第1张

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[]="";
char dest[]=""; /*dest[]数组不够长,数组越界*/
my_strcpy(dest,src);
Display(dest);
}
void correct1()
{
char *src="I Love China";
//使用 new 进行动态内存分配,strlen测得的长度不包括‘\0’
char *dest=new char[strlen(src)+];
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)+);
my_strcpy(dest,src);
Display(dest);
free(dest);
}
void correct3()
{
char src[]="";
char dest[]="";
my_strcpy(dest,src);
Display(dest);
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/585982.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存