C语言 memset函数盲点
#include <stdio.h> #include <stdlib.h> #include <string.h> struct packet { int len; char buf[100]; }; void main() { struct packet _packet; printf("%x\n", &_packet); memset(&_packet, 0, sizeof(_packet)); printf("hahahah\n"); }
在以上代码测试中,memset将结构体packet中的数组所有元素初始化为0,带数组的数据结构,结构体中存放的并非数组指针,而是整个数组都存放在结构体中。
#include <stdio.h> #include <stdlib.h> #include <string.h> void fool() { int array[10]; memset(array, 1, sizeof(array)); } int main() { fool(); return 0; }
这里 "memset(array, 1, sizeof(array));"并不能将 array所有元素初始化为1,因为sizeof(array)大小是40,那么memset就会理解为array有40个字节大小,将每个字节都是初始化为1,因此array每个元素的值都是 0x01010101。