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 ...
随机推荐
- 2018Pycharm激活方法
1.将"0.0.0.0 account.jetbrains.com"添加到hosts文件中 2.打开http://idea.lanyus.com/ 3.获取激活码,粘贴到第二个选项 ...
- Vsftp的PASV mode和Port模式配置文件的设置
FTP模式与数据端口 FTP 分为两类,PORT FTP和PASV FTP,PORT FTP是一般形式的FTP.这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认 ...
- Newtonsoft.Json 操作 JSON 字符串
Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而使用Json的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSeriali ...
- 《CSS核心技术详解》
前言 看似简单的CSS,却暗藏玄机,那是我们摸爬滚打好长时间后悟出的真理. 在很长的一段时间里,我并没有重视CSS,觉得CSS很简单,无非就是一些属性:后来才发现自己小看了CSS,对CSS的了解实在是 ...
- 极大似然估计(MLE)
基本思想 模型已定,参数未知 根据已存在的样本,挑选(求出)能让样本以最大概率发生的参数 极大似然估计和最小二乘法最大区别之一 极大似然需要知道概率密度函数(离散型叫分布律) 若总体X属离散型,其分布 ...
- js 前端图片压缩+ios图片角度旋转
step1:读取选择的图片,并转为base64: function ImgToBase64 (e, fn) { // 图片方向角 //fn为传入的方法函数,在图片操作完成之后执行 var Orient ...
- ubuntu16.04安装ftp服务器
参考文章: http://www.linuxidc.com/Linux/2017-01/139233.htm 1.检查是否安装vsftpd,如果安装了跳过第二步 vsftpd -v 2.安装vsftp ...
- angularjs 控制器、作用域、广播详解
一.控制器 首先列出几种我们平常使用控制器时的几种误区: 我们知道angualrJs中一个控制器时可以对应不同的视图模板的,但这种实现方式存在的问题是: 如果视图1和视图2根本没有任何逻辑关系,这样& ...
- vue框架-学习记录
前段时间在做vue项目时,遇到挺多问题,想简单总结一下: 1.关于父组件,子组件的通信 网上有很多这方面的讲解,讲解也比较细致,我主要总结了自己在项目中需要的: [1]父组件-子组件 也就是" ...
- Mock拦截ajax请求
//mock拦截ajax请求 ,生成随机数据Mock.mock('./servlet/UserServlet?method=getUser',{ 'list|1-5':[{ 'username':'@ ...