memset函数的使用

时间:2022-02-16 23:01:08

void *memset(void *s, int ch, size_t n);

说明:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s

关于memset有几个注意事项:

1.不能初始化为数值1:

如果程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以输出没有问题。

而如果程序数组a是整型的,使用 memset还是按字节赋值,这样赋值完以后就等于16843009,就完成了对一个INT元素的赋值了。

所以用memset对非字符型数组赋初值是不可取的!

memset是以字节为单位就是对array指向的内存的4个字节进行赋值,每个都用ASCⅡ为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是
00000001000000010000000100000001即16843009。

2.最后一个参数经常使用sizeof:

不同的机器上int的大小也可能不同,所以最好用sizeof()

3.对于结构体初始化:

例如有一个结构体Some x,可以这样清零:
memset(&x,0,sizeof(Some));
如果是一个结构体的数组Some x[10],可以这样:
memset(x,0,sizeof(Some)*10);

如果结构体中有数组的话还是需要对数组单独进行初始化处理的.