C400

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