5

我在所有元素中用 99 初始化数组

#include<iostream>
#include<cstring>
int main(){
    int a[10];
    memset(a,99,10);
    std::cout<<a[0]<<std::endl;
    return 0;
}

但我得到的输出是出乎意料的。

输出:-

1667457891

这个 memset 函数的异常行为背后的原因是什么。

4

2 回答 2

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*为 achar*fill在其上使用而不是memset,但memset也可以。

于 2012-10-27T17:16:58.270 回答
1

问题在于memset将每个字节设置为,99因此第一个字节int为 0x63636363,等于 1667457891。请std::fill改用。

于 2012-10-27T17:22:37.943 回答