web-dev-qa-db-ja.com

C言語のmemset関数

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

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

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

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

16
user707549

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

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

notaの各メンバーを値1に設定します...むしろそれはaから1は、4バイトごとにintが値0x01010101に設定されることを意味します。これは、0x00000001と同じではありません。

44
Jason

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

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


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

(配列を関数の引数として渡す場合、これは機能しません: CでのSizeofの動作

1
Sebastian Mach

どのアレイにも適用できます。最後の100はバイト単位のサイズであるため、整数はそれぞれ4バイトになり、-になります。

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

それを得る? :)