memset()関数に基づく深い理解

1096 ワード

今日はソフトウェア工程の大作業をして、長い間バグを調整しましたが、元々はmemset関数に対する認識が不足していました。int max[teach RelationNum]memset(max,0,sizeof(max));注意してください。sizeof(max)を使ってもいいです。sizeof(int)*teachRelationNumを使ってもいいです。直接teachRelationNumを使って初期化してはいけません。一般的には、memset(max,0,sizeof(max))と、memset(max,-1,sizeof(max));memset(max,'a',sizeof(max);初値を100とするなどはできません。初値を100とするには、forループを通過するしかないです。具体的な使い方:「string.h」を含みます。    char buffer="Hello world"printf(「Buffer before memset:%s」、buffer)memset;printf("Buffer after memset"%s",buffer);出力結果:Buffer before memset:Hello world Buffer after memset:***************int array[5]={1,4,3,5,2}memset;出力結果:0 0 0 mm mset(array,1,5*sizeof(int)//ここでは上記のプログラムとは異なり、出力結果は161643009 16168 43009 161643009である。memsetはバイト単位であるため、arrayが指すメモリの4バイトに対して割り当てられ、ASCII 1の文字で充填され、バイナリに変換すると、1は00001で、1バイトを占める。一つのINT要素は4バイトで、合わせて0001000000 100000万1です。1643009と同じです。INT元素の割り当てが完了しました。ですから、memsetを使って非文字型の配列に初期値を付けるのはよくないです。例えば、構造体Some xがあります。このようにゼロをクリアできます。memset(&x,0,sizeof(Some);構造体の配列Some x[10]であれば、memset(x,0,sizeof(Some)*10)とすることができます。以上はmemset()に対する深い研究で、一部は自分の心得で、一部は百科事典から摘出します。