在前面不止一次说过,定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生 “烫烫烫烫烫烫” 这样的野值,俗称 “乱码”。
每种类型的变量都有各自的初始化方法,**memset()**
函数可以说是初始化内存的 “万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem 即 “内存”(memory)的意思。该函数的原型为:
#include <string.h>
void *memset(void *str, int c, size_t n);
参数
- str:指向要填充的内存块
- c:要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
- n:要被设置为该值的字符数。
函数的功能是:将指针变量 str 所指向的前 n 字节的内存单元用一个 “整数” c 替换,注意 c 是 int 型。str 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。
例子
通过以下两个例子来看一下 memset()
函数的使用
例子1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char str[50];
memset(str,'$',7); // 填充 $ 到字符串
puts(str); // puts 将字符串输出到屏幕
system("pause");
return(0);
}
输出如下:
例子2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char str[50] = "I'm HamsterCoder";
puts(str);
memset(str+4,'$',12); // 覆盖原先内容
puts(str);
system("pause");
return(0);
}
输出如下: