每日一个C库函数-#1-memset()
来源
C 标准库 - <string.h>
声明
void *memset(void *str, int c, size_t n);
- str:要填充的内存块;
- c:要被设置的值(以何值填充)。该值以 int 形式传递,填充内存块时使用该值无符号字符形式;
- n:填充的字符数。一般用 sizeof() 来获取;
- RETURN:返回一个指向存储区 str 的指针。
用法&作用&注意事项
- 对一个内存空间或变量进行清空(初始化),一般设置为 0
struct sample s;memset(&s, 0, sizeof(s));
- 若对指针变量所指向的内存单元进行清零初始化,一定要先对指针变量(eg: p)进行初始化,使其指向一个有效的地址,此时 n 不是 sizeof(p),而应该是 sizeof(*p)
char str[10];
char *p = str;
memset(str, 0, sizeof(str)); // √ memset(p, 0, sizeof(str));
memset(p, 0, sizeof(*p)); // × *p 表示字符变量,1个字节
memset(p, 0, sizeof(p)); // × p 表示地址,4个字节
- 注意n的取值
int array[] = {0};memset(array, 1, 6);// array[0] = 16843009
// array[1] = 257/* 原因: 小端模式
array deinit: 00 00 00 00, 00 00 00 00, ...memset: 01 01 01 01, 01 01 00 00, ...array[0] , array[1] , ...01010101 , 00000101 , ...
%d: 16843009 , 257 ,
*/