すべての要素で配列を 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);
2番目のより差し迫った問題は、このインスタンスではmemset
とが異なる動作をすることですfill
。そのため、どちらが必要かを決定する必要memset
があります。 99 に等しい整数でいっぱいの配列、私が示したように使用してください。各バイトを 99 に設定する場合は、 を にキャストして の代わりに使用することをお勧めしますが、それでも機能します。fill
int
fill
int*
char*
fill
memset
memset
問題は、最初のmemset
バイトが 0x63636363 に設定されていることです。これは 1667457891 に相当します。代わりに使用してください。99
int
std::fill