C中strcpy函数实现
strcpy函数实现
strcpy函数的原型为:char* strcpy(char* _Dest, const char* _Source);
//实现1
char * strcpy(char* _Dest, const char* _Source)
{//检查传入参数的有效性assert(NULL != _Dest);assert(NULL != _Source);if (NULL ==_Dest || NULL == _Source)return NULL;char* ret = _Dest;while((*_Dest++ = *_Source++) != '\0') ;return ret;
}//实现2
char * strcpy(char* _Dest, const char* _Source)
{//检查传入参数的有效性assert(NULL != _Dest);assert(NULL != _Source);if (NULL ==_Dest || NULL == _Source)return NULL;char* ret = _Dest;int i = 0;for (i = 0; _Source[i] != '\0'; i++){_Dest[i] = _Source[i];}_Dest[i] = '\0';return ret;
}
解析:
- 为什么要返回char*类型;
为了实现链式连接。返回内容为指向目标内存的地址指针,这样可以在需要字符指针的函数中使用strcpy,例如strlen(strcpy(str1, str2))。 - 源地址和目标地址出现内存重叠时,如何保证复制的正确性;
调用c运行库strcpy函数,发现即使是内存重叠,也能正常复制,但是上面的实现就不行。说明,c运行库中strcpy函数实现,还加入了检查内存重叠的机制,下面是参考代码:
//my_memcpy实现重叠内存转移
char* my_memcpy(char* _Dest, const char* _Source, int count)
{//检查传入参数的有效性assert(NULL != _Dest);assert(NULL != _Source);if (NULL ==_Dest || NULL == _Source)return NULL;char* ret = _Dest;/**_Dest和_Source的内存地址有三种排列组合:1. _Dest和_Source没有发生重叠;2. _Dest和_Source地址重叠,且_Dest的地址大于_Source的地址;3. _Dest和_Source地址重叠,_Dest的地址小于_Source的地址;第一种情况和第三种情况,直接从低位字节开始复制,即可;第二种情况,必须从高位字节开始复制,才能保证复制正确。*/if (_Dest > _Source && _Dest < _Source + count ){_Dest = _Dest + count - 1;_Source = _Source + count - 1;while(count--){*_Dest-- = *_Source--;}}else{while(count--){*_Dest++ = *_Source++;}}return ret;
}
strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数。
- strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广;
- strcpy只有两个参数,即遇到‘\0’结束复制,而memcpy是根据第三个参数来决定复制的长度。
原文链接:https://blog.csdn.net/hhhuang1991/article/details/79955057
C中strcpy函数实现相关推荐
- vs2015c语言函数,c++中strcpy函数在VS2015无法使用的问题
本篇文章介绍了c++中strcpy函数在VS2015无法使用的问题. 一:原因:一般认为是vs准备弃用strcpy的,安全性较低,所以微软提供了strcpy_s来代替 然而,strcpy_s并没有st ...
- 编程实现strcpy函数_C编程中的strcpy()
编程实现strcpy函数 We earlier learned about strings in C programming in our Strings in C tutorial. Today, ...
- C语言 memcpy 和 strcpy 函数区别 - C语言零基础入门教程
目录 一.memcpy 函数/strcpy 函数简介 二.memcpy 函数/strcpy 函数实战 1.strcpy 函数属于字符串拷贝 2.memcpy 函数属于内存拷贝 三.猜你喜欢 零基础 C ...
- 深度解析源码strcpy函数
深度解析源码strcpy函数@TOC 前言 提示:这里可以添加本文要记录的大概内容: 本文将介绍c语言中string.h中strcpy函数的源码解析 提示:以下是本篇文章正文内容,下面案例可供参考 一 ...
- strcpy函数实现
strcpy函数实现 strcpy函数的原型为:char* strcpy(char* _Dest, const char* _Source); //实现1 char * strcpy(char* _D ...
- C语言 strcpy 函数 - C语言零基础入门教程
目录 一.strcpy 函数简介 二.strcpy 函数实战 1.strcpy 函数简单使用 2.strcpy 函数拷贝内容以'\0'结尾 3.strcpy 函数注意崩溃问题 三.猜你喜欢 零基础 C ...
- C语言strcpy函数的使用
点击蓝字 关注我们 strcpy简单使用: #include <stdio.h> #include <string.h>struct Student {int sid;cha ...
- c++语言函数strcpy,C++中函数的安全版本的意义及strcpy函数的功能和差别(图)
C++中函数的安全版本的意义及strcpy函数的功能和差别(图) 我们在进行C/C++编程时,会发现中有些函数在VS中使用时,提示使用_s的函数版本,其实这种_s的函数版本是安全版本,它们完成的任务与 ...
- 不使用strcpy函数,编程实现把b字符串复制到a中的程序(字符串长度限制在100个字符以内)。以下是部分代码,请完成并提交
不使用strcpy函数,编程实现把b字符串复制到a中的程序(字符串长度限制在100个字符以内).以下是部分代码,请完成并提交. #include <stdio.h> int main(){ ...
最新文章
- System Center 2012 Process Automatic
- printf 指针地址_数组指针和指针数组
- Python学习笔记_1_基础_2:数据运算、bytes数据类型、.pyc文件(什么鬼)
- 《几何与代数导引》习题1.18——Ceva 定理
- 一个简单的WPF字体选择器实现
- python tqdm自定义更新进度条
- A-Webkit第四章:添加学生
- 模块调用时对参数值的更改
- new Date()浏览器兼容性问题
- Neotec WELLFLO V8.1.6 油气井生产 模拟软件
- C语言运算符的优先级与结合性
- 基础平面设计(文字排版篇)
- 美国范德堡大学计算机科学博士,范德堡大学计算机科学专业是什么?相关信息是哪些呢?...
- html5canvas圆角矩形,html5 canvas 绘制圆角矩形
- ansible批量修改主机密码(非明文)
- FLEAPHP框架的文件缓存系统
- 红帽系统服务器格式化,Redhat Linux默认的文件系统是什么格式?
- 对标西湖大学,年薪60万博士后招聘来了
- 线上调试神器arthas
- 华为呼叫中心解决方案学习笔记三(多呼叫中心组网POOL)
热门文章
- 0基础学python难吗-零基础入门学习Python技术难不难?
- python2好还是python3好-Python 2 和 Python 3 有哪些主要区别?
- python散点图拟合曲线-使用python通过点拟合曲线
- 在哪里能收到python实例代码-python下10个简单实例代码
- python3下载手机安卓版-QPython3下载
- python常用标准库有哪些-Python 200个标准库汇总
- DL-3利用MNIST搭建神经网络模型(三种方法):1.用CNN 2.用CNN+RNN 3.用自编码网络autoencoder
- codeforces D. Palindrome Degree(hash)
- UVa483 Word Scramble
- java I/O思维导图