我在所有元素中使用99初始化数组
#include<iostream>
#include<cstring>
int main(){
int a[10];
memset(a,99,10);
std::cout<<a[0]<<std::endl;
return 0;
}
但我得到的输出是出乎意料的。
输出: -
1667457891
此memset函数异常行为背后的原因是什么。
答案 0 :(得分:11)
首先,memset
取大小(以字节为单位),而不是数组元素的数量,因为它无法知道每个元素的大小。您需要使用sizeof
来获取数组的字节大小,并将其赋予memset
:
memset(a, 99, sizeof(a));
但是,在C ++中,更喜欢std::fill
,因为它类型安全,更灵活,有时可以更高效:
std::fill(begin(a), end(a), 99);
第二个也是更紧迫的问题是memset
和fill
在这种情况下有不同的行为,所以你必须决定你想要的:memset
将设置每个字节到99,而fill
会将每个元素(在你的情况下每个int
)设置为99.如果你想要一个等于99的整数数组,我展示时使用fill
。如果您希望将每个字节设置为99,我建议将int*
转换为char*
并使用fill
而不是memset
,但memset
将为此工作。
答案 1 :(得分:1)
问题是memset
将每个字节设置为99
,因此第一个int
为0x63636363,等于1667457891.请改用std::fill
。