我写了一个小程序来习惯memset()
操作:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
int main()
{
int arr[10], i;
int t = INT_MAX;
memset(arr, t, sizeof(arr));
for (i = 0; i < 10; i++)
printf("%d\t",arr[i]);
printf("%d",t);
return 0;
}
上述计划的结果是:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
2147483647
上述计划中memset()
的行为是什么?为什么要将数组元素设置为-1
?
答案 0 :(得分:11)
memset
仅取值的低8位,并用这些位填充整个缓冲区。 MAX_INT的低8位全部为1(0xFF
),因此数组之后将全部填充。对于有符号整数,这是-1。
答案 1 :(得分:0)
Memset将arr指向的内存块的第一个sizeof(arr)字节设置为解释为unsigned char。因此,当您从arr读取整数时,您所获得的内容取决于您平台上这些字节的解释。