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。

posted on 2016-12-06 10:49  寒魔影  阅读(241)  评论(0编辑  收藏  举报

导航