是不是可以在整数数组上使用memset?我尝试了以下memset调用,并没有在int数组中获得正确的整数值.
int arr[5];
memset (arr, -1, sizeof(arr)/sizeof(int));
Run Code Online (Sandbox Code Playgroud)
我得到的Vaules是:
arr[0] = -1
arr[1] = 255
arr[2] = 0
arr[3] = 0
arr[4] = 0
Run Code Online (Sandbox Code Playgroud)
Ioa*_*rau 74
只需改为 memset (arr, -1, sizeof(arr));
请注意,对于除0和-1之外的其他值,这将不起作用,因为memset设置*ptr
从以下num
字节指示的变量开始的内存块的字节值.
void * memset ( void * ptr, int value, size_t num );
Run Code Online (Sandbox Code Playgroud)
并且由于int
表示在多个字节上,因此您将无法获得阵列中整数的所需值.
例外:
你得到的原因:
arr[0] = -1
arr[1] = 255
arr[2] = 0
arr[3] = 0
arr[4] = 0
Run Code Online (Sandbox Code Playgroud)
因为,在你的情况下,int的长度是4个字节(32位表示),数组的长度(以字节为单位)是20(= 5*4),而你只设置5个字节为-1(= 255)而不是20.
San*_*ker 33
不要memset
用于初始化除单字节数据类型之外的任何其他内容.
乍一看,它似乎可以用于初始化int
to 0
或-1
(并且在许多系统上它将起作用),但是你没有考虑到你可能生成陷阱表示,导致未定义的行为,或者整数表示不一定是两个补码的事实.
初始化的阵列正确的方法int
来-1
,是循环阵列之上,并显式地设置每个值.
为什么分裂?
memset(arr, -1, sizeof(arr));
Run Code Online (Sandbox Code Playgroud)
您的版本sizeof(arr)/sizeof(int)
为您提供了数组中元素的数量.
归档时间: |
|
查看次数: |
57047 次 |
最近记录: |