【FROM MSDN && 百科】

原型:  void *memset(void *s,int ch,size_t n);

#include<string.h>

将 s 中前 n 个字节用 ch 替换并返回 s 。说明memset是按字节赋值的。

Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted as an unsigned char).

将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数


常为新申请的内存做初始化工作, 其返回值为指向S的指针。,它是对较大的结构体或数组进行清零操作的一种最快方法。

常见错误:

第一: 搞反了 ch 和 n 的位置. 一定要记住如果要把一个char a[20]清零,一定是 memset(a,0,20);

第二: 过度使用memset,

第三:函数参数传的是指针,而在函数中出现memset(a,0,sizeof(a));这里错误的原因是VC函数传参过程中的指针降级,导致sizeof(a),返回的是一个 something* 指针类型大小的的字节数,如果是32位,就是4字节。

例如有一个结构体Some x,可以这样清零:

memset(&x,0,sizeof(Some));

如果是一个结构体的数组Some x[10],可以这样:

memset(x,0,sizeof(Some)*10);

-------------------------------------------------------------------

memset可以方便的清空一个结构类型的变量或数组。
如:
  struct sample_struct
  {
  char csName[16];
  int iSeq;
  int iType;
  };
对于变量 struct sample_strcut stTest;
一般情况下,清空stTest的方法:
  stTest.csName[0]={'\0'};
  stTest.iSeq=0;
  stTest.iType=0;
用memset就非常方便:
  memset(&stTest,0,sizeof(struct sample_struct));
如果是数组:
  struct sample_struct TEST[10];

  memset(TEST,0,sizeof(struct sample_struct)*10);
另外:
  如果结构体中有数组的话还是需要对数组单独进行初始化处理的。

 

DEMO:

//#define FIRST_DEMO
//#define SECOND_DEMO
#define THIRD_DEMO
#ifdef FIRST_DEMO
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main(void)
{char buffer[] = "This is a test of the memset function";printf( "Before: %s\n", buffer );memset(buffer,'*',4);printf( "After: %s\n", buffer );getch();return 0;
}
#elif defined SECOND_DEMO
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main(void)
{int a[5];int i;/*就是对a指向的内存的20个字节进行赋值,每个都用ASCⅡ为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4 字节,合一起就是00000001000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了*/memset(a,1,20);  //用memset对非字符型数组赋初值是不可取的!for (i=0;i<5;i++){printf("%d\n",a[i]);}printf("\n");getch();return 0;
}
#elif defined THIRD_DEMO
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main(void)
{char ss[]="Golden Global View";char *ss="Golden Global View";//出现内存访问冲突应该是因为ss被当做常量放入程序存储空间,memset(ss,'G',6);printf("%s\n",ss);getch();return 0;
}#endif

C语言之memset函数相关推荐

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

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

  2. 【C语言】memset函数用法

    数组也可以直接进行初始化,但 memset 是对较大的数组或结构体进行清零初始化的最快方法,因为它是直接对内存进行操作的. 头文件:#include <string.h> void *me ...

  3. c++ memset 语言_C++ memset函数

    [转载于https://www.cnblogs.com/yhlboke-1992/p/9292877.html] memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可 ...

  4. C语言之memset函数的使用

    转自:老生常谈,正确使用memset 本文归纳了下使用memset几个需要注意的地方,虽然内容很简单,但也希望对大家有所帮助. 1. memset是以字节为单位,初始化内存块. 当初始化一个字节单位的 ...

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

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

  6. c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍

    memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, si ...

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

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

  8. C语言memset函数

    C语言memset函数 一.memset函数是什么有什么作用 二.为什么使用menset函数 三.memset函数的使用 一.memset函数是什么有什么作用 # include <string ...

  9. c语言memset对应java,C语言memset函数详解

    C语言memset函数详解 memset() 的作用:在一段内存块中填充某个给定的值,通常用于数组初始化与数组清零. 它是直接操作内存空间,mem即"内存"(memory)的意思. ...

最新文章

  1. COBOL入门到精通
  2. jexus php 重写,如何让我们的PHP在Jexus中跑起来
  3. 024_输入输出字符集
  4. Oracle APEX 系列文章2:在阿里云上打造属于你自己的APEX完整开发环境 (准备工作)...
  5. ZigZag Conversion leetcode java
  6. 第三次学JAVA再学不好就吃翔(part16)--方法及方法重载
  7. 重磅官宣:Nacos2.0发布,性能提升10倍
  8. oracle11g备份出错,Oracle 11g备份导入12c错误
  9. 【T-SQL基础】02.联接查询
  10. Microsoft.System.Center.Operations.Manager.2007 中文版完整光盘下载地址
  11. C++ WinHTTP实现文件下载
  12. py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图
  13. Linux环境下安装SVN
  14. 不会真有人觉得在广州、深圳这样的城市月薪过万很容易吧
  15. HTC M7日版HTL22刷机包 毒蛇2.5.0 ART NFC Sense6.0
  16. 小程序学习 - 02 微信小程序案例实践
  17. 毕设 电脑维修_入库出库结算论文
  18. 深度学习模型的训练(大总结)
  19. DSP在线升级方案:TMS320C6678使用网络或者串口输出升级数据进行固件升级
  20. python爬取页面内容由京东提_python制作爬虫爬取京东商品评论教程

热门文章

  1. 解决只读文件系统问题
  2. python命令窗口代码如何调整大小_如何调整python窗口(Tkinter)大小
  3. 让别人远程访问你的代码网站项目或临时演示你的项目给客户的方式详解即外网局域网访问自己的项目
  4. Java和c的一些不同(一)
  5. 王爽 汇编语言 实验七
  6. STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记二(5):Cortex-M3处理器能量管理
  7. 如何设置 Mac 键盘的打字音效?
  8. 学术论文投稿与Rebuttal经验分享
  9. 俄版“支付宝”来了 俄互联网巨头Yandex推出全新支付服务
  10. 慕课嵌入式开发及应用(第二章.嵌入式硬件构件与底层驱动构件基本规范)