以下是代码:
#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?
答案 0 :(得分:9)
int
通常是四个字节长。但memset
设置单个字节的值,因此您将每个值设置为0x01010101,恰好等于16843009.
答案 1 :(得分:3)
memset
函数在内存中写入而不以任何方式理解其结构。如果你在会计报告中写了一堆随机的1
,那会不会让报告显示该公司花了1美元?我不这么认为。也许它会显示111111
美元。也许不吧。谁知道呢。
要智能地修改对象的值,您必须了解其结构。 memset
函数不理解win
的结构,只是在其字节上涂写1
。这意味着,memset
不知道或不关心。