strcpy 和 memcpy自实现
都是套路,详见代码注释:
#include <stdio.h>
#include <assert.h>
#include <iostream> using namespace std; char* myStrcpy(char *dest, const char *sour)
{
assert(dest != NULL && sour != NULL);//断言dest 和 sour都不为空,如果为空将会报错
char *ret = dest;//函数实现复制功能本身可以不用返回参数,这里是为了使用链式结构,返回char*。比如:int len = strlen(myStrcpy(str1,str2))
while((*dest ++ = *sour++) != '\0');
return ret;
} //函数原型:定义在string.h中 也是拷贝字符串用的。size个字节拷贝到目的内存起始的地址中。小心使用也是可以用来复制各种数据类型的。
//void *memcpy(void *dst, const void *src, size_t n);
//If copying takes place between objects that overlap, the behavior is undefined.
//对于地址重叠的情况,该函数的行为是未定义的。
//标准库中实现了memmove函数,该函数可以实现无内存重叠,功能是把源字符串拷贝到buff中,然后在写入到目的字符串中,增加了不必要的开销。
void *myMemcpy(void *dst, const void *src, size_t size)
{
assert(dst && src);
char *psrc;//记录src地址
char *pdst;//记录dst地址
//s------- size-----c
// d-----s--------t
if(src < dst && (char *)src + size > (char *)dst ){
psrc = (char*)src + size - ;
pdst = (char*)dst + size - ;
while(size --){
*pdst -- = *psrc --;
}
}else{
psrc = (char *)src;
pdst = (char *)dst;
cout<<psrc<<endl;
while(size --){
*pdst ++ = *psrc ++;
}
}
return dst;
} int main()
{
char str [] = "abc";
char dst[] ;
int s[] = {,,};
int d[];
myMemcpy(dst, str, );
dst[] = '\0';
puts(dst);
myMemcpy(d, s, * );
cout<<d[]<<" "<<d[]<<" "<<d[]<<endl;
return ;
}
strcpy 和 memcpy自实现的更多相关文章
- strcpy和memcpy的区别(转载)
strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...
- strcpy vs memcpy
[本文连接] http://www.cnblogs.com/hellogiser/p/strcpy_vs_memcpy.html [分析] strcpy和memcpy都是标准C库函数,它们有下面的特点 ...
- 【转】 strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...
- 关于strcpy和memcpy
strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符.已知strcpy函 ...
- strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...
- strcpy与memcpy的区别
strcpy和memcpy的区别 strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制 ...
- strcpy()、memcpy()、memmove()、memset()的内部实现
一直想知道 strcpy().memcpy().memmove().memset()的内部实现 strcpy(), 字符串拷贝. char *strcpy(char *strDest, const c ...
- [置顶] strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容,还会复制字符串的结束符. 已知strcpy函数 ...
- strcpy和memcpy
切记,memcpy的头文件是memory.hstrcpy和memcpy主要有以下3方面的区别.1.复制的内容不同.strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组.整型.结构体 ...
- sprintf、strcpy 及 memcpy 函数区别
这些函数的区别在于 实现功能 以及 操作对象 不同.strcpy 函数操作的对象是 字符串 ,完成 从 源字符串 到 目的字符串 的 拷贝 功能. sprintf 函数操作的对象 不限于字符串 :虽然 ...
随机推荐
- 00 大王警语--be_a_new_gentleman
大王博客:https://www.cnblogs.com/alex3714/ # 表面层次# 1,着装特体(服饰的牌子中高端)# 2,每天洗澡# 3,适当用香水# 4,女士优先# 5,不随地吐痰.不乱 ...
- Leetcode 76.最小覆盖子串
最小覆盖子串 给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = "A ...
- 藏妹子之处(excel)
问题描述: 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: (1)任意两个单元格都不在同 ...
- css上下垂直居中方法总结
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- maven更改镜像路径为阿里镜像,以便下载速度快
1.maven更改镜像路径为阿里镜像,以便下载速度快 2.maven每更新一次镜像地址,都会重新下载一次包 3. 怎么配maven链接阿里云的镜像详细步骤 修改maven根目录下的conf文件夹中的s ...
- gogs: 如何恢复repository
当某天gogs的数据库突然崩溃,配置数据全部消失后,要如何将之前git的repository重新加入到gogs中呢?(别问了,那个倒霉的人就是我) step 1, 2, 3, go... 1. 进入g ...
- 设计模式:浅析 抽象工厂、工厂方法、简单(静态)工厂 java实现
----简单工厂 (也叫静态工厂模式):一个抽象产品抽象出多个详细产品类.一个详细工厂类 代码: //抽象产品角色 public interface Car{ public void drive(); ...
- go语言slice的理解
Golang slice yongsean 作者 2017.02.17 00:07 打开App 创建切片,len.cap.append b := make([]int, 5) println(le ...
- poj 1331 Multiply
Multiply Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5179 Accepted: 2773 Descript ...
- 云上kafka和自建kafka对比
说起Kafka,许多使用者对它是又爱又恨.Kafka是一种分布式的.基于发布/订阅的消息系统,其极致体验让人欲罢不能,但操心的运维.复杂的安全策略.可靠性易用性的缺失.算不上极致的性能发挥.并不丰富的 ...