私は現在memset関数を研究していますが、すべての例は次のようにchar配列に関するものです。
char a[100];
memset(a, 0, 100);
このchar配列のすべての要素を0に設定します。
Memsetがint配列またはfloat配列に適用できるかどうか疑問に思いましたか?
はい、どのメモリバッファにも適用できますが、正しいメモリバッファサイズを入力する必要があります... memset
は、任意のメモリバッファを一連のバイトとして扱うため、char
、int
、float
、double
などは実際には重要ではありません。ただし、マルチバイトタイプを特定のゼロ以外の値に設定しないことに注意してください...例:
int a[100];
memset(a, 1, sizeof(a));
nota
の各メンバーを値1に設定します...むしろそれはa
から1
は、4バイトごとにint
が値0x01010101
に設定されることを意味します。これは、0x00000001
と同じではありません。
静的サイズおよび可変長配列の場合、次のことができます。
<arbitrary-type> foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes
経験則:[データサイズ]をハードコーディングしないでください。
(配列を関数の引数として渡す場合、これは機能しません: CでのSizeofの動作 )
どのアレイにも適用できます。最後の100はバイト単位のサイズであるため、整数はそれぞれ4バイトになり、-になります。
int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance
それを得る? :)