【问题标题】:memset sets random values [duplicate]memset 设置随机值
【发布时间】:2013-10-20 02:43:03
【问题描述】:

代码如下:

#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))。然后一切都如预期的那样。 win的内容全为零。

我错过了什么吗?

我在Ubuntu 13.04 上使用g++ 4.7.3

抱歉这个重复的问题。

这就是答案。谢谢

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

【问题讨论】:

  • 我可以将自己的问题标记为重复吗?
  • @DyP 是的。我有不同的关键字,所以直到几分钟前我才找到它
  • (该评论已自动创建,因为我投票关闭为 dup。)
  • 真的,“随机”吗?你是什​​么国家安全局?

标签: c++ memset


【解决方案1】:

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

【讨论】:

  • “整数是四个字节长”在这个特定平台上。
  • @DyP 是的,我想我应该澄清一下......
【解决方案2】:

memset 函数在不了解其结构的情况下写入内存。如果你在一份会计报告中写了一堆随机的1,这会让报告显示公司已经花费了 1 美元吗?我不这么认为。也许它会显示111111 美元。也许不吧。谁知道呢。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多