memset()无法按预期工作

时间:2016-03-29 02:22:53

标签: c++ memset

我对以下代码感到困惑:

#include<iostream>
#include<cstring>

int main()
{
    int arr[3][4];
    memset(arr, 10, sizeof(arr));
    for(int i = 0; i < 3; ++i)
    {
        for(int j = 0; j < 4; ++j)
            std::cout<<arr[i][j]<<" ";
        std::cout<<"\n";
    }

    return 0;
}

输出:

168430090 168430090 168430090 168430090 
168430090 168430090 168430090 168430090 
168430090 168430090 168430090 168430090

我原本预计会运行上面的代码会打印

10 10 10 10
10 10 10 10
10 10 10 10

有人可以解释这种奇怪行为的原因吗?

2 个答案:

答案 0 :(得分:6)

Becase int超过一个字节。 memset()使用给定值填充每个字节。因此,4字节整数的每个字节都包含一个10。

答案 1 :(得分:3)

memset会将传递的内存视为指向字节的指针。每个字节将设置为10,而不是每个int。

所以你要为每个int打印出0x0a0a0a0a或168430090。