こんばんわ。
何度も申し訳ありません。
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回プログラムを実行する
}
}
No.4ベストアンサー
- 回答日時:
★まとめ
・既に『memset』関数や、『ZeroMemory』関数の回答があるので構造体の全体、1部の
初期化の記述例を紹介します。
・それと『#include <memory.h>』を記述しないとメモリ関係の関数が利用できません。
『ZeroMemory』関数の場合は『#include <windows.h>』があればそのまま利用できます。
●構造体全体を初期化
ZeroMemory( rdata, sizeof(rdata) ); または、
memset( rdata, 0, sizeof(rdata) ); です。
●構造体一部を初期化
ZeroMemory( &rdata[i], sizeof(struct tag) ); または、
memset( &rdata[i], 0, sizeof(struct tag) ); です。
※rdata[i]の1データだけ初期化します。
余談:
・『ZeroMemory』関数は Win32 API と分類されていますが、実体は『memset』関数に
『#define』されているだけです。でも、戻り値を『VOID』型にキャストされているので
『memset』関数のリターン値を取得できません。→第一引数のアドレスが『memset』関数
ではリターンします。
・以上。おわり。
参考URL:http://taka.no32.tk/tips/Win32/ZeroMemory.html
前回に続きまして返信ありがとうございました。
memset以外にZeroMemory関数を知ることができました。
ありがとうございました。
No.5
- 回答日時:
厳密なことをいうと、構造体のメンバにポインタや浮動小数点数が含まれていると、memset等でゼロクリアすることができません。
ただし、VC++.NET 2003に限定するなら、たまたまうまくいきます。確実にゼロクリアするには、
static const struct tag zero = { 0 };
rdata[i] = zero;
のように、ゼロ初期化されたオブジェクトを代入するのが簡単でしょう。
ちなみに、memset関数を使う際にインクルードすべきヘッダは、<memory.h>ではなく、<string.h>です。
No.3
- 回答日時:
先の御二方の回答どおり、WinAPI で既に用意されている
Zeromemory() 関数を使えば構造体の全メンバは0初期化できます。
使用方法は
第一引数:構造体のアドレスを渡す
第二引数:第一引数で渡した構造体のサイズ(バイト単位なので sizeof() を使用)を渡す
回答例は先の御二方が記述しておられるのでこちらは意味の理解の
ための記述です。
返信ありがとうございます。
せっかくですので、教えていただいたZeromemory関数を用いて記述してみようと思います。
ありがとうございました。
No.2
- 回答日時:
経験論で言うのであれば、構造体の初期化(ゼロクリアなら特に)には、
Win32APIを使用する環境ならばZeroMemory関数が一般的かと思います。
C言語標準ライブラリであれば、memset関数(ないしmemsetで0を渡す事を定義した自作ラップ関数等)を使うのが一番素直なやり方では無いでしょうか?
例)memset( &rdata[i], 0x00, sizeof(tag) );
返信ありがとうございます。
memset関数は知っていましたが、実際に構造体の初期化を行う際、どのような記述があるのか分かりませんでした。また、Win32APIにZeroMemory関数が存在することを知ることができました。
ありがとうございました。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語 3 2022/10/04 15:07
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
C++ 構造体の一括初期化 {0}
C言語・C++・C#
-
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
C#で構造体の配列を持った構造体を使いたいのですが
C言語・C++・C#
-
-
4
構造体メンバの初期化
C言語・C++・C#
-
5
charからLPTSTRへの変換方法
C言語・C++・C#
-
6
char*を初期化したいのですが
C言語・C++・C#
-
7
「fatal error C1189」を回避するには?
C言語・C++・C#
-
8
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
9
プロセスIDからウィンドウハンドルを取得する方法
C言語・C++・C#
-
10
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
C言語・C++・C#
-
11
ハンドルはポインタか
C言語・C++・C#
-
12
画面を強制的に再描画させる方法
C言語・C++・C#
-
13
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
14
変数名の付け方
Java
-
15
unsigned long long 型のフォーマット指定子
C言語・C++・C#
-
16
CStringをwchar_tに変換したい
C言語・C++・C#
-
17
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
18
構造体のメンバ初期化について
C言語・C++・C#
-
19
CString から LPCTSTRの型に変換
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Integer変数をカラにしたいので...
-
C++ 構造体の一括初期化 {0}
-
VBAのプログラムで、DIAG = 1# ...
-
long型のデータをバイト型の配...
-
charとucharの違い
-
VBAの変数のデータ型を変更する...
-
C++ メンバイニシャライザリス...
-
命名規則 VB 構造体
-
日付チェック関数について
-
構造体のデータを丸ごとコピー...
-
VB.NETのStructureというのはど...
-
VBAにてcolorindexを変数に格納...
-
C言語 構造体の中に共用体を定...
-
構造体を型の異なる構造体に代入
-
VBAで符号無し整数
-
FILE構造体がどのように定...
-
C++/CLIの構造体のコンストラク...
-
構造体のパックの仕様の違いに...
-
異なる構造体のデータのコピー
-
値が変わるのはどうしてでしょ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
C++ 構造体の一括初期化 {0}
-
Integer変数をカラにしたいので...
-
「#undef」と「#define」の使い...
-
VBAにてcolorindexを変数に格納...
-
long型のデータをバイト型の配...
-
構造体のデータを丸ごとコピー...
-
構造体のポインタにNULLが入らない
-
VBAの変数のデータ型を変更する...
-
異なる構造体のデータのコピー
-
ユーザー定義型変数の一括初期化
-
構造体の初期化方法について
-
typedefをプログラム中で解除す...
-
C言語 構造体の中に共用体を定...
-
charとucharの違い
-
日付チェック関数について
-
整数から16進数への変換 現在c...
-
値が代入されてない時
-
命名規則 VB 構造体
-
構造体にする理由・利点・使用例
おすすめ情報