41.内存函数实现(memcpy,memset,memmove,memicmp,memchr.memccpy)
- memcpy
#include <stdio.h>
#include <stdlib.h>
#include <memory.h> void * mymemcpy(void* _Dst, void const* _Src, size_t _Size)
{
if (_Dst == NULL || _Src == NULL)
{
return NULL;
} //转化成char类型,一次前进一个字节
char *dst = _Dst;
char *src = _Src; for (int i = ; i < _Size; i++)
{
dst[i] = src[i];
} return _Dst;
} void main()
{
int a[] = { ,,,,,,,,, };
int *p = malloc(sizeof(int) * );
int *tmp = mymemcpy(p, a, ); for (int i = ; i < ; i++)
{
printf("%d\n" ,p[i]);
} char str[] = "hello world";
char mystr[];
mymemcpy(mystr, str, strlen(str) + ); printf("%s\n", mystr); system("pause");
} - memset
void *mymemset(void *_Dst, int _Val, size_t _Size)
{
if (_Dst == NULL || _Val == NULL)
{
return;
} for (int i = ; i < _Size; i++)
{
((char *)_Dst)[i] = _Val;
} return _Dst;
} - memmove
void * mymemmove(void *_Dst, const void *_Src, size_t _Size)
{
if (_Dst == NULL || _Src == NULL)
{
return NULL;
} void *psrc = malloc(_Size);//分配内存
memcpy(psrc, _Src, _Size);
memcpy(_Dst, psrc, _Size);
free(psrc);
return _Dst;
} - memicmp(比较指定字符串前n个字符串)
int mymemicmp(const void *_Buf1, const void *_Buf2, size_t _Size)
{
//保存变量
char *buf1 = _Buf1;
char *buf2 = _Buf2; //结束标识
char *end = buf1 + _Size; while ((*buf1 == *buf2) && buf1 != end)
{
buf1++;
buf2++;
} if (buf1 == end)
{
return ;
}
else
{
return *buf1 - *buf2 > ? : -;
}
} - memchr(寻找一个字符串中是否有指定字符)
void *mymemchr(void *start, char ch, int maxlength)
{
char *p = NULL;
for (int i = ; i < maxlength; i++)
{
if (((char *)start)[i] == ch)
{
p = (char *)start + i;
break;
}
}
return p;
} - memccpy(复制n个字符,遇到指定值退出)
void * mymemccpy(void * _Dst, const void *_Src, int _Val,size_t _MaxCount)
{
char *dst = _Dst;
char *src = _Src; for (int i = ; i < _MaxCount; i++)
{
dst[i] = src[i];
if (dst[i] == _Val)
{
break;
}
}
}
41.内存函数实现(memcpy,memset,memmove,memicmp,memchr.memccpy)的更多相关文章
- [整理]内存重叠之memcpy、memmove
函数原型: void *memcpy( void *dest, const void *src, size_t count ); void *memmove( void* dest, const vo ...
- memcpy、memmove、memset及strcpy函数实现和理解
memcpy.memmove.memset及strcpy函数实现和理解 关于memcpy memcpy是C和C++ 中的内存拷贝函数,在C中所需的头文件是#include<string.h> ...
- C语言-内存函数的实现(一)之memcpy
C语言中的内存函数有如下这些 memcpy memmove memcmp memset 下面看看memcpy函数 memcpy 我们想想,之前有那个字符串拷贝的函数,即strcpy函数.都有拷贝的函数 ...
- memcpy、memmove、memset、memchr、memcmp、strstr详解
第一部分 综述 memcpy.memmove.memset.memchr.memcmp都是C语言中的库函数,在头文件string.h中.memcpy和memmove的作用是拷贝一定长度的内存的内容,m ...
- C语言-内存函数的实现(二)之memmove
C语言中的内存函数有如下这些 memcpy memmove memcmp memset 下面看看memmove函数 memmove 为什么会需要memmove函数? int main() { int ...
- strcpy()、memcpy()、memmove()、memset()的内部实现
一直想知道 strcpy().memcpy().memmove().memset()的内部实现 strcpy(), 字符串拷贝. char *strcpy(char *strDest, const c ...
- c++中内存拷贝函数(C++ memcpy)详解
原型:void*memcpy(void*dest, const void*src,unsigned int count); 功能:由src所指内存区域复制count个字节到dest所指内存区域. 说明 ...
- C语言标准库函数memcpy和memmove的区别以及内存重叠问题处理
①memcpy()和memmove()都是C语言中的标准库函数,定义在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下: void *memcpy(void *dst, cons ...
- 关于memcpy和memmove的一点说明
今天看到书上降到memcpy和memmove的区别才突然发现原来两者之间有如此区别,以前只知道这两个函数是 实现同样的功能,没有接触到其不同. memcpy和memmove在MSDN的定义如下: 从两 ...
随机推荐
- Windows 相关
Open the Windows Update troubleshooter If your computer is having problems finding and installing op ...
- js文字的无缝滚动(上下)
使用scrolltop值的递增配合setInterval与setTimeout实现相关效果,左右无缝滚动使用scrollLeft即可 Dom内容 <div id="container& ...
- Linux FTP客户端
1.File Zilla File Zilla是一个开源的,跨平台的Linux FTP客户端.File Zilla有一个标签式的用户界面,允许用户查看正在传输的文件的所有细节.File Zilla是通 ...
- java 多线程——join()方法
在java语言中,join()方法的作用是让调用该方法的线程在执行完run()方法后,再执行join 方法后面的代码. 简单点说就是,将两个线程合并,用于实现同步的功能. 具体而言:可以通过线程A的j ...
- [NOIP2013提高组]火柴排队
题目:洛谷P1966.Vijos P1842.codevs3286. 题目大意:有两排火柴,每根都有一个高度.设a.b分别表示两排火柴的高度,现在要令$\sum(a_i-b_i)^2$最小.现两排火柴 ...
- Intel投入5亿美元提升14nm工艺CPU需求
虽然14nm行将收尾,但是却有大量的客户在赶“末班车”,导致CPU供货告急. Intel年初宣布增加10亿美元的额外资本支出用于转向更新的.更先进的生产工具,以便增加产能,在本周的第39届纳斯达克投资 ...
- HDU 4941 Magical Forest (Hash)
这个题比赛的时候是乱搞的,比赛结束之后学长说是映射+hash才恍然大悟.因此决定好好学一下hash. 题意: M*N的格子,里面有一些格子里面有一个值. 有三种操作: 1.交换两行的值. 2.交换两列 ...
- PKU 2288 Islands and Bridges 状态dp
题意: 给你一张地图,上面有一些岛和桥.你要求出最大的三角哈密顿路径,以及他们的数量. 哈密顿路:一条经过所有岛的路径,每个岛只经过一次. 最大三角哈密顿路:满足价值最大的哈密顿路. 价值计算分为以下 ...
- 基于BP神经网络的简单字符识别算法自小结(C语言版)
本文均属自己阅读源代码的点滴总结.转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:gzzaigcn2009@163.com 写在前面的闲话: 自我感觉自己应该不是一个非常 ...
- DF标志和串移动指令(movsb/movsw)
1.标志寄存器的第10位DF,方向标志位.在串处理指令中,控制每次操作后si,di的增减 DF=0,每次操作后,si.di添加 DF=1,每次操作后,si.di减小 我们能够用汇编语法描写叙述movs ...