memset函数使用详解

原创 2015年07月08日 10:56:06

功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,

     块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作

用 法: void *memset(void *s, char ch, unsigned n);

  程序例:

  #include <string.h>

  #include <stdio.h>

  #include <memory.h>

  int main(void)

  {

   char buffer[] = "Hello world/n";

   printf("Buffer before memset: %s/n", buffer);

   memset(buffer, '*', strlen(buffer) );

   printf("Buffer after memset: %s/n", buffer);

   return 0;

  }

  输出结果:

  Buffer before memset: Hello world

  Buffer after memset: ***********

memset函数详细说明

  1。void *memset(void *s,int c,size_t n)

  总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。


  2。例子

   int main(void)

{

   char *s="Golden Global View";

   clrscr();

   memset(s,'G',6);//貌似这里有点问题//

   printf("%s",s);

   getchar();

   return 0;

   } 

  【这个问题相当大,程序根本就运行不下去了,你这里的s指向的是一段只读的内存,而你memset又试图修改它,所以运行时要出错,修改办法char *s修改为char s[](后文中说char *为什么不能修改)


  3。memset() 函数常用于内存空间初始化。如:

  char str[100];

  memset(str,0,100);


  4。memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘memset(a, '/0', sizeof(a));


  memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;

例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。


  strcpy就只能拷贝字符串了,它遇到'/0'就结束拷贝;例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘/0’之前)是否超过50位,如超过,则会造成b的内存地址溢出。

  5.补充:某人的一点心得

  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);

  6。strcpy

  原型:extern char *strcpy(char *dest,char *src);

  用法:#i nclude

  功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

  说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

  返回指向dest的指针。

  memcpy

  原型:extern void *memcpy(void *dest, void *src, unsigned int count);

  用法:#i nclude

  功能:由src所指内存区域复制count个字节到dest所指内存区域。

  说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。

  memset

  原型:extern void *memset(void *buffer, int c, int count);

  用法:#i nclude

  功能:把buffer所指内存区域的前count个字节设置成字符c。

  说明:返回指向buffer的指针。

版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言memset函数详解与误用

memset为内存填充函数,包含在头文件中,可以用它对一片内存空间进行初始化,其原型为   void *memset(void *s, int v, size_t n);   英文释义如下:  ...
  • hu_jiacheng
  • hu_jiacheng
  • 2013年05月18日 19:11
  • 11289

关于C++ memset函数使用的问题

1. 关于该函数 函数原型:  memset(void *s,int ch,size_t n)       函数说明:       memset函数是计算机中C/C++语言函数。将s所指向的某一块内存...
  • wangwei6125
  • wangwei6125
  • 2017年06月17日 22:26
  • 248

关于memset函数的需要注意的问题

最近用到了memset函数,但是忽略了一点:memset函数的写入是按字节写入的。以下为自己犯错的地方: int *a = new int [100]; memset(a, 10, sizeof(i...
  • u012273127
  • u012273127
  • 2017年02月14日 18:58
  • 513

memset函数的使用原理

竞赛中经常使用memset函数进行数组初始化,但只能初始为0, -1。哪怕写成: int num[N]; memset(num, 1, sizeof(num)); num[0]也是个很大的数。 今...
  • xishisugan
  • xishisugan
  • 2017年02月01日 20:35
  • 427

C语言中memset函数详解(很清晰易懂)

功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,   块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作   用 法: void *me...
  • PengPengBlog
  • PengPengBlog
  • 2016年09月20日 10:23
  • 5549

C51的memset

刚才看51程序,发现了一个函数memset(),以前很少见到过,写在这里记下来。   这是F1帮助查到的memset的相关解释截图 这个函数是包含在头文件里面的,功能就是将指定长度的一...
  • abclixu123
  • abclixu123
  • 2012年06月15日 22:03
  • 2509

memset函数的正确使用与原理

头文件:#include 经常用这个初始化,没想到最后错误也是因为它。 函数原型为void* cb_memset(void* buffer, int b, size_t size) 这个函数...
  • amy_jork
  • amy_jork
  • 2016年07月28日 15:37
  • 3392

memset函数导致内存泄露的问题

我们一般常说的内存泄漏是指堆内存的泄漏。程序从堆中分配的内存使用完毕后必须显式释放,否则这块内存就不能被再次使用,即这块内存泄漏了。内存泄漏导致软件在运行过程中占用越来越多的内存,程序的效率会越来越低...
  • sogouauto
  • sogouauto
  • 2015年06月03日 10:02
  • 1509

memset函数使用详解

以为int a[100]; memset(a, MAX,sizeof(a));就是将a数组全部赋值为MAX,现在才知道他的填充是以字节为单位,一般用于对字符型变量的初值进行赋值. 更详细的解说见...
  • u011394362
  • u011394362
  • 2013年09月17日 09:29
  • 841

C#中memset的实现

 memset原型:extern void *memset(void *buffer, int c, int count);用法:#i nclude功能:把buffer所指内存区域的前count个字节...
  • miromelo
  • miromelo
  • 2009年04月18日 12:35
  • 7610
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:memset函数使用详解
举报原因:
原因补充:

(最多只允许输入30个字)