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);
}
strcpy函数的更多相关文章
- strcpy函数的实现
strcpy函数的实现 大家一般认为名不见经传strcpy函数实现不是很难,流行的strcpy函数写法是: char *my_strcpy(char *dst,const char *src) { a ...
- strcpy函数实现
1,strcpy最简便实现 char * strcpy_to (char *dst, const char *src) { char *address = dst; assert((dst != NU ...
- strcpy函数和strncpy函数的区别
strcpy函数和strncpy函数的原型介绍在我的另一篇文章中介绍了,见strcpy,strncpy,strlen等函数原型 strcpy:字串复制 原型:char *strcpy(char *de ...
- memcpy、memmove、memset及strcpy函数实现和理解
memcpy.memmove.memset及strcpy函数实现和理解 关于memcpy memcpy是C和C++ 中的内存拷贝函数,在C中所需的头文件是#include<string.h> ...
- strlen() 和 strcpy()函数
strlen() 和 strcpy()函数的区别,这两个一个是返回一个C风格字符串的长度,一个是对一个C风格字符串的拷贝,两个本来功能上是不同的,此外,他们还有一些细小的区别:strlen(" ...
- strcpy函数的C/C++实现
2013-07-05 14:07:49 本函数给出了几种strcpy与strncpy的实现,有ugly implementation,也有good implementation.并参考标准库中的imp ...
- strcpy函数导致release版程序崩溃
最近在写一个读取模型文件的小程序.很随意的使用了strcpy函数进行char字符数组的拷贝,这个数组是需要传递给PostMessage作为WPARAM的参数.代码部分如下: char pStrCurr ...
- strcmp函数和strcpy函数
(一)strcmp函数 strcmp函数是比較两个字符串的大小,返回比較的结果.一般形式是: i=strcmp(字符串,字符串); 当中,字符串1.字符串2均可为字符串常量或变量:i 是用于存放比 ...
- 第九十六题(编写strcpy 函数)
96.08 年中兴校园招聘笔试题 1.编写strcpy 函数 已知strcpy 函数的原型是 char *strcpy(char *strDest, const char *strSrc); 当中st ...
随机推荐
- Linux 下编译安装xDebug命令速记
下载xdebug-2.2.4.tgz软件链接: http://pan.baidu.com/s/1jGHYRMA #解压 xdebugtar -zxvf xdebug-2.2.4.tgz #进入xdeb ...
- 浅谈JavaScript的事件(事件处理程序)
事件就是用户或者浏览器自身执行的某种动作.诸如click.load和mouseover,都是事件的名字.而响应某个事件的函数就叫事件处理程序.事件处理程序的名字以"on"开头,比如 ...
- Zookeeper启动时报8080端口被占用
zookeeper启动时报8080 端口被占用,导致启动失败.特别是服务器上部署了tomcat服务时需要注意. 通过查看zookeeper的官方文档,发现有3种解决途径: (1)删除jetty. (2 ...
- Flask 开发| Flaskr 开发内容总结
Flaskr 开发说明 官方文档 http://flask.pocoo.org/docs/0.12/tutorial/ 演示网站 http://flaskr.it592.com/ 涉及到的内容: 连接 ...
- 什么是 lnmp 实现原理。
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构. Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统.代表版本有:debian.centos ...
- Linux 快速执行历史命令,用 !编号
例如: history | grep mysql 使用 !914 可以快速执行上述命令:
- 如何在关闭ssh连接的情况下,让程序继续运行?
[http://blog.csdn.net/smstong/article/details/5872309] 对Unix,Linux类服务器维护经常是通过ssh完成的,而有些操作比较费时,如更新程序等 ...
- 在windows端和linux端安装Git
一.Git的安装 1. 在windows端 到地址:https://git-scm.com/downloads 选择对应版本下载后,进行傻瓜式安装即可 2. 在linux端 查看是否安装了git,出 ...
- ASP.NET Core的身份认证框架IdentityServer4--(1)服务配置
官网文档地址:点我点我 准备 创建一个名为IdentityServer的ASP.NET Core Web Api 项目,端口5000 创建一个名为Api的ASP.NET Core Web Api 项目 ...
- maven使用jstl表达式和The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application解决
maven 中使用jstl表达式中出现如上错误.原因: 1.由于在maven中的web项目没有自动依赖jstl的jar 未在pom文件中添加jstl相关的jar <!--jstl表达式--> ...