sizeof 関数は、とても便利であり、頻繁に利用する。
特に変数を初期化するときに、
char data[128]; memset(data, 0, sizeof(data));
とすると 変数 data は sizeof(data) の長さ、つまり 128 バイトの 0x00 が
埋められて初期化される。
ところがよく誤りがちであるのは、
char data[128]; function(data); void function(char* data) { memset(data, 0, sizeof(data)); }
としても関数 dunction の中での data はポインターであるので sizeof(data) は
ポインターとしての長さとして、つねに 16バイトであり
memset(data, 0, sizeof(data)) は data の先頭から、いつも 16 バイトだけしか
0x00 がセットされないことになる。
下位の関数で初期化した場合は、長さもパラメータとして渡して、その長さを使って
初期化してやらねばならない。
多くのC/400 ソースを抱えているとつい、間違いやすいのでご注意を !!