我在所有元素中用 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改用。