C 库函数 **void memset(void str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
下面是 memset() 函数的声明。
void *memset(void *str, int c, size_t n)
下面的代码演示了 memset() 函数的用法。
#include <stdio.h>
#include <string.h>
int main ()
{
char str[50];
strcpy(str,"This is string.h library function");
puts(str);
memset(str,'$',7);
puts(str);
return(0);
}
得到以下结果:
This is string.h library function
$$$$$$$ string.h library function
这里要注意区分与malloc函数的区别:
malloc函数
void * malloc(size_t n);
用于从堆上分配指定字节的内存空间。其中,形参n为要求分配的内存字节数。如果执行成功,函数范围获得的内存空间的首地址;执行失败,返回值为NULL。由于函数返回值值的类型为void的指针,因此,可以将void指针类型转换后赋值给任意类型指针,这样就可以通过操作该类型指针来操作从堆上获得的内存空间。
需要注意的是malloc函数分配得到的内存空间是未初始化的。有时候,在使用前需要对该内存空间进行初始化,memset就派上用场了。
memset函数
void * memset (void * p,int c,size_t n);
其中,指针p为所操作的内存空间的首地址,c为每个字节所赋的值,n为所操作内存空间的字节长度,也就是内存被赋值为c的字节数。
在使用memset时经常要注意的它是以字节为单位进行赋值的,所赋值的范围是0x00~0xFF。
总得来说要注意的是malloc函数在分配二维数组及以上的结构时,可能会产生不连续的内存分配,memset函数对数据结构进行初始化的时候将会是对连续内存块进行操作。