我正在用所有元素中的 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
将每个 byte 设置为 99,而 fill
将设置每个 element (在您的情况下为每个 int
)到 99。如果您想要一个包含等于 99 的整数的数组,请使用 fill
,如我所展示的那样。如果您希望每个字节设置为 99,我建议将 int*
转换为 char*
并在其上使用 fill
而不是 memset
,但 memset
也适用。
关于c++ - memset() 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13102356/