memset 可以用于多字节类型和非零值吗

Ala*_*inD 3 c c++ arrays

我正在尝试将数组初始化为非零值:

BYTE byteArray[50];
memset(byteArray, 20, sizeof(byteArray));   // Works fine

int intArray[50];
memset(intArray, 20, sizeof(intArray));     // Does not work
Run Code Online (Sandbox Code Playgroud)

目前,我只是手动初始化数组:

// Initialise array manually
for (int pos = 0; pos < 50; pos++)
    intArray[pos] = 20;
Run Code Online (Sandbox Code Playgroud)

我确实很欣赏memset设置内存范围中的每个字节,因此这不能按照我需要的多字节类型的方式工作(除了请求值为 的特殊情况0)。有没有办法memset使用多字节类型强制非零值,或者可能有替代库函数?

eer*_*ika 6

有没有办法使用多字节类型强制 memset 为非零值

不。

或者也许有一个等效的 C 库函数?

从来没听说过。相反,您可以使用一个简单的循环。

但既然您已经标记了 C++,那么该标准库中有一个适当的函数:std::fillstd::fill_n

附言。memset 不仅适用于 0。它还适用于具有相同重复字节模式的所有数字。比如说~0