質問: 構造体の初期化方法について こんばんわ。 何度も申し訳ありません。 vc++.net 2003を用いてコンソールプログラミングを行っています。前回この掲示板を利用して複数回実行するプログラムを作成し、そこに構造体を用いたプログラムを作成しました。以下に概要を示します。 グローバルで構造体を宣言しているため、複数回実行を行うプログラムでは前回の値が格納されたままであると思い、毎回実行時に構造体の初期化を行いたいと思っています。 そこで、以下に示します構造体の初期化はどのように記述すればよいのでしょうか?0で初期化したいと思っています。 よろしくお願い致します。 #define max 2000 //グローバル struct tag{ int npkt; int gettime; int rpkt; int losspkt; }rdata[max]; main(){ //for文で複数回実行処理 for(i=0;i<=5;i++){ //ここで構造体の初期化を記述する //例として、5回プログラムを実行する } }
回答: 経験論で言うのであれば、構造体の初期化(ゼロクリアなら特に)には、 win32apiを使用する環境ならばzeromemory関数が一般的かと思います。 c言語標準ライブラリであれば、memset関数(ないしmemsetで0を渡す事を定義した自作ラップ関数等)を使うのが一番素直なやり方では無いでしょうか? 例)memset( &rdata[i], 0x00, sizeof(tag) );