memset行为

foo*_*o_l 1 c string

我需要你帮助理解memset行为.

char *data = malloc(40);
memset(data,1,40);
Run Code Online (Sandbox Code Playgroud)

当我看到数据内容时,它是010101010101010直到大小结束.然后我改为这个.

memset(data,~0,40);
Run Code Online (Sandbox Code Playgroud)

我看到正确的内容为11111111直到结束.将值设置为1和~0之间的区别是什么.谢谢你的时间.

Mak*_*zin 8

memset使用您指定的值填充提供的内存区域的每个字节.请注意,仅使用最后一个参数的最低有效字节来填充内存块(即使其类型为int).

在第一种情况下,这个字节是0x01,而在第二种情况下,它是0xFF(全部为1).这就是你观察这种差异的原因.