I am initializing array with 99 in all the elememts
#include<iostream>
#include<cstring>
int main(){
int a[10];
memset(a,99,10);
std::cout<<a[0]<<std::endl;
return 0;
}
but the output I am getting is unexpected.
Output:-
1667457891
What is the reason behind the abnormal behavior of this memset function.
Firstly, memset
takes the size in bytes, not number of elements of the array, because it cannot know how big each element is. You need to use sizeof
to get the size in bytes of the array and give that to memset
instead:
memset(a, 99, sizeof(a));
However, in C++, prefer std::fill
because it is type-safe, more flexible, and can sometimes be more efficient:
std::fill(begin(a), end(a), 99);
The second and more pressing problem is that memset
and fill
have different behaviour in this instance, so you must decide which you want: the memset
will set each byte to 99, whereas fill
will set each element (each int
in your case) to 99. If you want an array full of integers that equal 99, use fill
as I showed it. If you want each byte set to 99, I would recommend casting the int*
to a char*
and using fill
on that instead of memset
, but memset
will work for that too.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With