难道不能对整数数组使用 memset
吗?我尝试了以下 memset
调用,但没有在 int
数组中获得正确的整数值。
int arr[5];
memset (arr, -1, sizeof(arr)/sizeof(int));
我得到的值是:
arr[0] = -1
arr[1] = 255
arr[2] = 0
arr[3] = 0
arr[4] = 0
最佳答案
只需更改为memset (arr, -1, sizeof(arr));
请注意,对于 0 和 -1 以外的其他值,这将不起作用,因为 memset为以下 num
字节设置从 *ptr
指示的变量开始的内存块的字节值。
void * memset ( void * ptr, int value, size_t num );
并且由于 int
由多个字节表示,您将无法获得数组中整数的所需值。
异常(exception)情况:
- 0 是一个异常(exception),因为如果将所有字节都设置为 0,则该值将为零
- -1 是另一个异常(exception),因为正如帕特里克强调的那样,-1 在 int8_t 中是 0xff (=255),在 int32_t 中是 0xffffffff
你得到的原因:
arr[0] = -1
arr[1] = 255
arr[2] = 0
arr[3] = 0
arr[4] = 0
是因为,在你的情况下,一个 int 的长度是 4 个字节(32 位表示),你的数组的字节长度是 20(=5*4),而你只将 5 个字节设置为 -1( =255) 而不是 20。
关于c - 为什么 "memset(arr, -1, sizeof(arr)/sizeof(int))"不将整数数组清除为 -1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7202411/