C++ memset 是否只适用于 0 和 -1?

Does C++ memset only works for 0 and -1?

int a[2];
memset(a, 3, sizeof(a)); 

当我 运行 时,我得到的输出是 0 1。为什么不 3 3

Does C++ memset only works for 0 and -1?

它适用于所有字节值。

int a[2];
memset(a, 3, sizeof(a)); 

when I run this I am getting output as 0 1.

我对此表示怀疑。要么是你的系统坏了,要么是你弄错了。

Why not 3 3

因为那不是 std::memset 所做的。它将 每个字节 设置为您提供的值。每个字节都为 3 的多字节整数没有值 3。在值 3 中,只有最低有效字节具有值 3,更高有效字节将为 0。

除非您想要重复的字节模式,否则 std::memset 对您没有用处。如果您只是想为每个元素分配一个值,那么您应该使用 std::fill 或其朋友:

std::fill(std::begin(a), std::end(a), 3);

或者只是一个简单的循环:

for(int& i : a)
    i = 3;

0 恰好是唯一在所有系统上跨所有字节宽度保留值的字节模式; -1 是另一个但仅适用于 2 的补码系统。在 1 的补码系统上,另一个模式的值为 -0。这就是为什么 std::memset 在使用这些值时并且仅在使用这些值时偶然表现得与 std::fill 相同。