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);

2番目のより差し迫った問題は、このインスタンスではmemsetとが異なる動作をすることですfill。そのため、どちらが必要かを決定する必要memsetがあります。 99 に等しい整数でいっぱいの配列、私が示したように使用してください。各バイトを 99 に設定する場合は、 を にキャストして の代わりに使用することをお勧めしますが、それでも機能します。fillintfillint*char*fillmemsetmemset

于 2012-10-27T17:16:58.270 に答える
1

問題は、最初のmemsetバイトが 0x63636363 に設定されていることです。これは 1667457891 に相当します。代わりに使用してください。99intstd::fill

于 2012-10-27T17:22:37.943 に答える