memset()无法按预期工作

memset() does not work as expected

本文关键字:工作 memset      更新时间:2023-10-16

我对以下代码感到困惑:

#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

有人能解释一下这种奇怪行为的原因吗?

因为int的长度超过一个字节。memset()用给定的值填充每个字节。所以,你的4字节int中的每一个字节都包含一个10。

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

因此,您为每个int打印0x0a0a0a0a或168430090。