17

私は現在memset関数を研究していますが、すべての例は次のようにchar配列に関するものです。

char a[100];
memset(a, 0, 100);

このchar配列のすべての要素を0に設定します。

memsetがint配列またはfloat配列に適用できるかどうか疑問に思いましたか?

4

3 に答える 3

45

はい、任意のメモリ バッファに適用できますが、正しいメモリ バッファ サイズを入力する必要があります。memset任意のメモリ バッファを一連のバイトとして扱います。ただし、マルチバイト型をゼロ以外の特定の値に設定しないことに注意してください...例:charintfloatdouble

int a[100];
memset(a, 1, sizeof(a));

の各メンバーを値 1 に設定するのではなく、 to によって使用されるメモリ バッファー内のすべてのバイトを設定します。これ、4 バイトごとに値 が設定されることを意味します。aa1int0x010101010x00000001

于 2011-07-25T12:56:23.937 に答える
1

任意の配列に適用できます。最後の 100 はバイト単位のサイズであるため、整数はそれぞれ 4 バイトになるため、次のようになります。

int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance

それを得る?:)

于 2011-07-25T12:55:45.940 に答える
1

静的サイズの可変長配列の場合、次のことができます

<arbitrary-type>  foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes


経験則: [データ サイズ] をハードコーディングしないでください。

(関数の引数として配列を渡す場合、これは機能しません: Behavior of Sizeof in C )

于 2011-07-25T13:05:22.203 に答える