1949啦网--小小 痛苦,是因为能力和欲望不匹配造成的

memset函数

定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。

memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作,memset() 的作用是在一段内存块中填充某个给定的值。因为它只能填充一个值,所以该函数的初始化为原始初始化,无法将变量初始化为程序中需要的数据。用memset初始化完后,后面程序中再向该内存空间中存放需要的数据。

该函数的原型为:

# include <string.h>

void *memset(void *s, int c, unsigned long n);


函数的功能是:将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。

memset 一般使用“0”初始化内存单元,而且通常是给数组或结构体进行初始化。一般的变量如 char、int、float、double 等类型的变量直接初始化即可,没有必要用 memset。如果用 memset 的话反而显得麻烦。

虽然参数 c 要求是一个整数,但是整型和字符型是互通的。但是赋值为 '\0' 和 0 是等价的,因为字符 '\0' 在内存中就是 0。所以在 memset 中初始化为 0 也具有结束标志符 '\0' 的作用,所以通常我们就写“0”。



memset 函数的第三个参数 n 的值一般用 sizeof()  获取,这样比较专业。注意,如果是对指针变量所指向的内存单元进行清零初始化,那么一定要先对这个指针变量进行初始化,即一定要先让它指向某个有效的地址。而且用memset给指针变量如p所指向的内存单元进行初始化时,n 千万别写成 sizeof(p),这是新手经常会犯的错误。因为 p 是指针变量,不管 p 指向什么类型的变量,sizeof(p) 的值都是 4。

# include <stdio.h>  # include <string.h>  int main(void)  {      int i;  //循环变量      char str[10];      char *p = str;      memset(str, 0, sizeof(str));  //只能写sizeof(str), 不能写sizeof(p)      for (i=0; i<10; ++i)      {          printf("%d\x20", str[i]);      }      printf("\n");      return 0;  }

memset(p, 0, sizeof(p));  //地址的大小都是4字节

0 0 0 0 -52 -52 -52 -52 -52 -52

memset(str, 0, sizeof(str));

0 0 0 0 0 0 0 0 0 0


微信扫码关注

更新实时通知

作者:xiao 分类:软件笔记 浏览: