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

每种类型的变量都有各自的初始化方法**memset()** 函数可以说是初始化内存的 “万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem 即 “内存”(memory)的意思。该函数的原型为:

  1. #include <string.h>
  2. void *memset(void *str, int c, size_t n);

参数

  • str:指向要填充的内存块
  • c:要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式
  • n:要被设置为该值的字符数。

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

例子

通过以下两个例子来看一下 memset() 函数的使用

§ memset函数 - 图1 例子1

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main ()
  5. {
  6. char str[50];
  7. memset(str,'$',7); // 填充 $ 到字符串
  8. puts(str); // puts 将字符串输出到屏幕
  9. system("pause");
  10. return(0);
  11. }

输出如下:

§ memset函数 - 图2

§ memset函数 - 图3 例子2

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main ()
  5. {
  6. char str[50] = "I'm HamsterCoder";
  7. puts(str);
  8. memset(str+4,'$',12); // 覆盖原先内容
  9. puts(str);
  10. system("pause");
  11. return(0);
  12. }

输出如下:

§ memset函数 - 图4