转载:http://blog.csdn.net/u011118276/article/details/46742341

1、memcpy

头文件:#include <string.h>

函数原型:void *memcpy(void *dest, const void *src, size_t n)

功能:将指针src指向的内存空间的n个字节复制到dest指针指向的内存空间

参数:src 为原内容内存的起始地址,dest为复制到目标地址的起始地址

返回值:目标dest内存的起始地址

注意:1、内存空间不能够有重叠;

2、memcpy对于需要复制的内容没有限制,因此用途更广;

3、很明确的是memcpy是将 n个字节,  虽然memcpy对复制的内容完全没有任何的限制,比如数组,结构体等特殊的结构,如果你想将整个结构体变量的内容复制到dest内存区,最好使用sizeof将要复制的内容的完整大小求出来赋值给n,以保持复制的完整性;

c代码:

[cpp] view plain copy
  1. void *memCpy(void *dest, const void *src, size_t n)
  2. {
  3. if (NULL == dest || NULL == src || n < 0)
  4. return NULL;
  5. char *tempDest = (char *)dest;
  6. char *tempSrc = (char *)src;
  7. while (n-- > 0)
  8. *tempDest++ = *tempSrc++;
  9. return dest;
  10. }

2、memset

头文件:#include <string.h>

函数原型:void *memset(void *s, int c, size_t n)

功能:以s为起始位置的n个字节的内存区域用整数c进行填充

参数:s为内存区域的起始位置,c为要填充的字符,n为要填充多少个字节

返回值:目标s内存的起始地址

注意:1、n表示的是字节数,函数是以字节的形式每次赋值给目标地址;

2、memset函数也是以字节为单位进行赋值的,所以要想在整形数组中给每一位赋确定的非0值,一般来讲是不可行的;(下方将有对此说明测试的程序)

c代码:

[cpp] view plain copy
  1. void *memSet(void *s, int c, size_t n)
  2. {
  3. if (NULL == s || n < 0)
  4. return NULL;
  5. char * tmpS = (char *)s;
  6. while(n-- > 0)
  7. *tmpS++ = c;
  8. return s;
  9. }

下面是针对注意事项的测试程序:

[cpp] view plain copy
  1. #include <stdio.h>
  2. #include <string.h>
  3. void *memSet(void *s, int c, size_t n)
  4. {
  5. if (NULL == s || n < 0)
  6. return NULL;
  7. char * tmpS = (char *)s;
  8. while(n-- > 0)
  9. *tmpS++ = c;
  10. return s;
  11. }
  12. int main()
  13. {
  14. int buf[10];
  15. int i;
  16. printf("%d\n", sizeof buf);
  17. for (i = 0; i < 10; i++)
  18. printf("buf[%d] = %d\n", i, buf[i]);
  19. printf("------------------------------------\n");
  20. memSet(buf, 1, sizeof(buf));
  21. for (i = 0; i < 10; i++)
  22. printf("buf[%d] = %d\n", i, buf[i]);
  23. return 0;
  24. }

结果:

结果分析:可以看出得出的结果并没有得到想要的1,而得出不知道是什么的东西;

1的二进制表示是:0000 0000 0000 0000 0000 0000 0000 0001

memset函数也是以字节为单位进行赋值的,指针每次只会向后移动一个字节,依此将值赋给每次的地址中,直到n = 0;

最后在四个字节中赋值的结果为:0000 0001 0000 0001 0000 0001 0000 0001

十进制显示就为:16843009

当把数组改成char buf[10]时,显示的结果如下:(更加证明是以字节方式赋值)

memcpy/memset函数的c语言实现相关推荐

  1. strcpy,memcpy,memset函数实现

    strcpy 实现,只能拷贝字符串 char* strcpy(char* des,const char* source) {char* r=des; assert((des != NULL) & ...

  2. c语言memset函数用法,C语言memset函数使用方法详解

    C语言memset函数使用方法详解 一.函数原形   void *  memset(void*s, int ch,size_t n) 二.函数作用  将以s内存地址为首的连续n个字节的内容置成ch,一 ...

  3. c语言memset函数作用,C语言memset函数使用方法详解

    C语言memset函数使用方法详解 一.函数原形   void *  memset(void*s,int ch,size_t n) 二.函数作用  将以s内存地址为首的连续n个字节的内容置成ch,一般 ...

  4. java中相当于memcpy的函数_(C语言)memcpy函数原型的实现

    在网上看到一道题,实现一个memcpy函数,于是查了一下memcpy的函数原型,如下: void* memcpy(char *strDest, const char *strSrc, int Coun ...

  5. memcpy、memmove、memcmp、memset函数的使用说明和模拟实现

    在前面的文章中,我已经对字符串函数进行了详细的介绍和模拟实现,今天,我来讲解另一类函数----------内存函数. 这里写目录标题 memcpy函数 memmove函数 memcmp函数 memse ...

  6. 【转】C语言的memset函数

    http://vip.6to23.com/tenax/clib/string/memset.htmlhttp://hi.baidu.com/longchengjiang/blog/item/32c0e ...

  7. 编写一个自己的完全C语言版本的memset函数,并且评价这个实现的性能和可移植性。

    编写一个自己的完全C语言版本的memset函数,并且评价这个实现的性能和可移植性. memset这个函数的作用大致可以理解为将从指针指向的地址开始的指定字节长度的空间全部替换为指定的值.那么我们可以很 ...

  8. 细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数

    一.函数介绍: 1.memcpy 函数原型:extern void *memcpy(void *dest, const void *src, size_t count); 用法:#include< ...

  9. c++ memset 语言_C++中memset函数用法详解

    本文实例讲述了C++中memset函数用法.分享给大家供大家参考,具体如下: 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常 ...

最新文章

  1. 这个能快速发表Cell,Nature,Molecular cell的分析技术你要错过吗?
  2. PHP通过DOM操作XML
  3. Java 常用API的运用,效率及技巧
  4. 高精度人脸表情识别 开源代码
  5. excel 粘贴了HTML怎么删掉,Excel怎么删除网页上复制删不掉的文本框
  6. MySQL入门系列:存储程序(二)之存储函数简介
  7. 码长6075的qc-ldpc编译码的MATLAB误码率仿真
  8. JoyOI(TYVJ)1071-LCIS【线性dp,LIS,LCS】
  9. 一起来啃书——PHP看书
  10. 企业的培训体系:145页企业培训年度规划和培训体系的建立
  11. 总结下SQLServer和Oracle转换的脚本
  12. VWware Vsphere 实战记录一、vsphere简介及相关名词介绍
  13. 如何判断一个女孩是不是真的爱你?
  14. COCOS2D-X编译成android的项目
  15. 电子技术基础(三)_第3章集成运算放大器及其应用__基本运算电路
  16. JS 案例 改变网页背景颜色
  17. websocket站内信实时消息推送
  18. 干货分享 | Windows系统下载SRA数据方法——生信小白亲测可行
  19. 鲑鱼回游java游戏_鲑鱼洄游 一段悲壮的落幕
  20. 【LBS】移动互联网基于LBS地理位置应用开发必备

热门文章

  1. 【BZOJ4262】Sum 单调栈+线段树
  2. BZOJ 3505 [Cqoi2014]数三角形(组合数学)
  3. 算法:老鼠走迷宫问题
  4. POJ1789-Truck History .
  5. vagrant使用centos的环境安装..
  6. Linux 命令积累 fuser lsof mtr
  7. vue 启动时卡死_十分钟浅入Vue 原理
  8. html iframe post,使用Jquery和IFrame的跨子域请求(GET,POST,…)
  9. pkill mysql_每天一个linux命令:kill命令
  10. 折半查找的思想及源码_常用排序与查找算法