转载: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. Object-c:NSString的创建
  2. ORA-01504问题
  3. 求职学习笔记|并发编程知识点常见问题总结(一)
  4. C# 之 Int16 Int32 Int64 的区别
  5. java跳转html页面_springboot 2.0.8 跳转html页面
  6. 阿里-2019算法岗笔试编程题-kmp匹配
  7. Java 8 Lambda 表达式解析 1
  8. Bootstrap 警告块
  9. Android安全问题 抢先开机启动
  10. bisect algorithm(python 的标准库函数 bisect model)
  11. 百度首页制作 (仿百度首页)
  12. 华为交换机:配置基于IP子网划分 VLAN
  13. Far planner之 障碍物的图搜索
  14. css 设置层级关系,css层级关系怎么设置
  15. AVR32单片机 矩阵按键 按键键值函数解析
  16. ZYNQ开发之BootROM加载
  17. 刷机总是出现missed hello_金立-GN3002L 无法开机,怎么能解锁刷机呢?
  18. java访问https链接下载图片
  19. Python线程和进程的了解,多线程多进程
  20. 微信公众号没办法直接获取用户的手机号

热门文章

  1. 通过ifrmae异步下载文档
  2. Codeforces Round #318 (Div. 2) B Bear and Three Musketeers (暴力)
  3. 【转】Java:String、StringBuffer和StringBuilder的区别
  4. 乐刻运动 app android,乐刻运动
  5. mysql数据库套件_MySQL数据库管理开发套件(EMS SQL Management Studio For MySQL)下载 v1.3.0.46170 官方版 - 比克尔下载...
  6. 笔记本电脑怎么清理灰尘_手机声音越用越小怎么办?一段黑科技音波就能清理扬声器灰尘...
  7. c语言常用英语单词大全下载,C语言实现英文单词助手
  8. java arraylist排序_最全Java集合笔记
  9. python多大孩子可以学_孩子学编程最佳年龄是多大
  10. C语言代码规范(三)if语句