C/400

51. sizeof には、ご注意を !!

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 ソースを抱えているとつい、間違いやすいのでご注意を !!