我在所有元素中用99初始化数组
#include<iostream>
#include<cstring>
int main(){
int a[10];
memset(a,99,10);
std::cout<<a[0]<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但我得到的输出是出乎意料的.
输出: -
1667457891
这个memset函数异常行为背后的原因是什么?
Set*_*gie 11
首先,memset取大小(以字节为单位),而不是数组元素的数量,因为它无法知道每个元素的大小.您需要使用sizeof以获取数组的字节大小,并将其赋予memset:
memset(a, 99, sizeof(a));
Run Code Online (Sandbox Code Playgroud)
但是,在C++中,首选,std::fill因为它是类型安全的,更灵活的,有时可以更高效:
std::fill(begin(a), end(a), 99);
Run Code Online (Sandbox Code Playgroud)
第二个和更迫切的问题是,memset和fill在这种情况下不同的行为,所以你必须决定你想要的:在memset将各设置一个字节为99,而fill将分别设置元素(每个int如果你想要一个你的情况)至99数组充满了等于99的整数,fill按照我展示的方式使用.如果你想将每个字节设置为99,我建议将其转换int*为a char*并使用fillon而不是memset,但memset也适用于此.