为什么下面程序的输出是84215045
?
int grid[110];
int main()
{
memset(grid, 5, 100 * sizeof(int));
printf("%d", grid[0]);
return 0;
}
最佳答案
memset
将目标缓冲区的每个 byte 设置为指定值。在您的系统上,一个 int
是四个字节,在调用 memset
之后每个字节是 5。因此,grid[0]
的值为 0x05050505
(十六进制),即十进制的 84215045
。
一些平台为 memset
提供替代 API,将更宽的模式写入目标缓冲区;例如,在 OS X 或 iOS 上,您可以使用:
int pattern = 5;
memset_pattern4(grid, &pattern, sizeof grid);
获得您似乎期望的行为。你的目标是什么平台?
在 C++ 中,您应该只使用 std::fill_n
:
std::fill_n(grid, 100, 5);
关于c++ - 为什么 memset() 错误地初始化 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7100529/