memset操作后,数组的结果为0

时间:2018-10-23 12:36:00

标签: c++ memset

int main()
{
    int array[10];
    memset(array, INT_MIN, sizeof(array));
    cout << INT_MIN << endl;
    for (int i = 0; i < 10; i++)
        cout << array[i] << endl;
    system("pause");
}

就像这样,当我使用“ memset(array,-1,sizeof(array))”时,我会得到正确的结果。但是,当我使用INT_MIN而不是-1时,所有输出均为0,但INT_MIN应该为-2147483648: 输出results image

2 个答案:

答案 0 :(得分:4)

memset的“问题”在于它没有填写您提供的int,而是其unsigned char的转换。参见here

  

要设置的值。该值以int形式传递,但函数填充   使用该值的无符号char转换的内存块。

由于此,如果将其INT_MIN用作第二个参数,则最终将得到0。对于此特定任务,恐怕memset并不是正确的工作工具,因为它会逐个设置每个字节,因此不允许您随意设置int,除非所需的模式包括相同的字节一遍又一遍,在这里不是这种情况。

答案 1 :(得分:4)

说明:

memset(array, INT_MIN, sizeof(array));

通过强制转换:(无符号字符)INT_MIN的结果来设置每个字节,因为它按字节操作,而不是数组元素。