memset设置随机值

时间:2013-10-11 22:02:34

标签: c++ memset

以下是代码:

#include <iostream>
#include <cstring>

int main()
{
    int win[11];
    std::memset(win, 1, sizeof(win));
    for (int i = 0; i < 11; ++i)
        std::cout << win[i] << ' ';
    std::cout << std::endl;

    return 0;
}

我认为这里没有逻辑缺陷?但是我没有打印1字符串,而是16843009

如果我将memset更改为std::memset(win, 0, sizeof(win))。然后一切都如预期。胜利的内容全是零。

我在这里错过了什么吗?

我在g++ 4.7.3上使用Ubuntu 13.04

很抱歉这个重复的问题。

这是答案。感谢

Why does "memset(arr, -1, sizeof(arr)/sizeof(int))" not clear an integer array to -1?

2 个答案:

答案 0 :(得分:9)

int通常是四个字节长。但memset设置单个字节的值,因此您将每个值设置为0x01010101,恰好等于16843009.

答案 1 :(得分:3)

memset函数在内存中写入而不以任何方式理解其结构。如果你在会计报告中写了一堆随机的1,那会不会让报告显示该公司花了1美元?我不这么认为。也许它会显示111111美元。也许不吧。谁知道呢。

要智能地修改对象的值,您必须了解其结构。 memset函数不理解win的结构,只是在其字节上涂写1。这意味着,memset不知道或不关心。