不调用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);
}

最新文章

  1. java中使用队列:java.util.Queue (转)
  2. MapReducer程序调试技巧
  3. Nodejs新建博客练习(二)添加flash支持
  4. 细说webpack之流程篇
  5. Python实战:Python爬虫学习教程,获取电影排行榜
  6. 初识Jmeter(一)
  7. 201521123059 《Java程序设计》第十三周学习总结
  8. FormsAuthentication 票据前后台登录导致掉线
  9. bootstrap开发微票儿网站首页
  10. EZ 2018 05 20 NOIP2018 模拟赛(十五)
  11. Socket网络编程--网络爬虫(4)
  12. 文件IO-Linux
  13. Servlet --简单用户留言系统
  14. Android无法访问本地服务器(localhost/127.0.0.1)的解决方案
  15. overflow属性-摘自网友
  16. asp.net 中长尾链接实现推送 -- comet
  17. java 和 javascript CryptoJS 进行HmacSHA1加密
  18. ==和equals区别
  19. springboot 整合 elasticsearch
  20. JSP页面的生命周期

热门文章

  1. CentOS安装scp命令
  2. Springboot security cas整合方案-原理篇
  3. (转载)Java:按值传递与按引用传递
  4. Windows Server 2016-重命名域控制器
  5. centos7时间同步
  6. Linux 获取本机IP、MAC地址用法大全
  7. JQuery坑,说说哪些大家都踩过的坑
  8. python函数的面向对象——面向对象设计
  9. CSS布局(二) 盒子模型属性
  10. 01 深入理解JVM的内存区域