2013-10-11 33 views
0

下面是代码: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.3Ubuntu 13.04

对不起,这个重复的问题。

这是答案。由于

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

+0

我可以将自己的问题标记为重复吗? – gongzhitaao

+0

@DyP是的。我有不同的关键字,所以直到几分钟前我才发现它 – gongzhitaao

+0

(该评论已自动创建,因为我投票结束为dup。) – dyp

回答

8

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

+1

在这个特定平台上的“整数是四个字节长”。 – dyp

+0

@DyP是的,我想我应该澄清... –

3

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

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