C/C++のmemset

832 ワード

1.必要なヘッダファイル
Cでは
C++では
2.関数プロトタイプ
void * memset ( void * ptr, int value, size_t num );
は、アドレスptrから始まるnumバイトにvalueを付与します.注意:バイトごとに値を付与し、ptrから始まるnumバイトの各バイトにvalueを付与します.
(1)ptrがchar型アドレスを指す場合、valueは任意の文字値であってもよい.
(2)ptrが非char型を指す場合,int型アドレスのように正しく値を付けるにはvalueの値は−1または0しか与えられない.−1と0がバイナリに変換された後はそれぞれ同じであるため,int型が4バイトを占めると,−1=0 XFFFFFFFFFF,0=0 X 00000000とする.
例:
int A[2];
memset(A, -1, sizeof A);

付与プロセスは次の図に示されています.
int型が4バイトを占めるため、memsetの付与方式は1バイト毎に付与されるので、A[0]またはA[1]は実際には4バイトが合わさった値、すなわち0 XFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
例、エラー代入:
int A[2];
memset(A, 1, sizeof A);

付与プロセスは次の図に示されています.
A[0]の値は実際には0 X 01010101=16843009なので、私たちが望んでいるものではありませんよ.