为什么“memset(arr, -1, sizeof(arr)/sizeof(int))”不能将整数数组清除为-1?

2023-11-25

是不是不能使用memset在整数数组上?我尝试了以下方法memset调用并没有得到正确的整数值int array.

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 以外的其他值,这不起作用 since memset设置从由 指示的变量开始的内存块的字节值*ptr对于以下num bytes.

void * memset ( void * ptr, int value, size_t num );

自从int如果用多个字节表示,则您将无法获得数组中整数的所需值。

例外情况:

  • 0 是一个例外,因为如果将所有字节设置为 0,则该值将为零
  • -1 是另一个例外,因为帕特里克强调 -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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么“memset(arr, -1, sizeof(arr)/sizeof(int))”不能将整数数组清除为-1? 的相关文章

随机推荐