我在所有元素中用 99 初始化数组
#include<iostream>
#include<cstring>
int main(){
int a[10];
memset(a,99,10);
std::cout<<a[0]<<std::endl;
return 0;
}
但我得到的输出是出乎意料的。
输出:-
1667457891
这个 memset 函数的异常行为背后的原因是什么。
首先,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*
为 achar*
并fill
在其上使用而不是memset
,但memset
也可以。
问题在于memset
将每个字节设置为,99
因此第一个字节int
为 0x63636363,等于 1667457891。请std::fill
改用。