• ベストアンサー

構造体の代入

構造体の比較はパディング領域が存在しうるので一つ一つの要素を比較する必要がありますが、 構造体を代入するのは、そのまま代入して問題ないでしょうか? それとも1要素ずつ代入すべきでしょうか。

  • mtsed
  • お礼率92% (77/83)

質問者が選んだベストアンサー

  • ベストアンサー
  • fibre102
  • ベストアンサー率20% (6/29)
回答No.2

http://www.kouno.jp/home/c_faq/c2.html#7 などが参考になると思います。

参考URL:
http://www.kouno.jp/home/c_faq/c2.html#7
mtsed
質問者

お礼

なるほど。 ありがとうございます。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

そのまま代入して問題ありません。

mtsed
質問者

お礼

ありがとうございます。

関連するQ&A

  • ファイルのデータを構造体に代入する方法

    学習し始めてから時間が経ちましたが、まだ初心者のまま・・・少しずつ頑張っている状態の者です。 今回はタイトルのことで御質問させてください。 関数Read(自己作成)でcsvファイルの内容を読み取り、読み取ったデータを用意しておいた構造体の変数ポインタを利用して代入しようと試みているのですが・・・要領がつかめません。 それで気になったのですが、読み込んだファイルを用意しておいた構造体に入れるにはどんな方法があるかよろしければご教授下さい。 私としてはforを使ったやり方があるのなら是非見本を見せてほしいのですが・・・ ちなみに、私が考えていたプログラム案は以下の通りです。 構造体にはcsvファイル・1レコード分の情報が入る構成。 構造体と読み取るファイルの構造は酷似しているが構造体全てに入る情報でない場合がある。 構造体には必要な分、配列領域を確保する ファイルの先頭アドレスはファイルポインタに代入。 構造体の先頭アドレスはポインタ変数に代入。   main関数とは別の関数の引数に2つのアドレスをコピー。 ★ そこでファイルデータを構造体へ代入しmainに戻って出力する。    その関数での戻り値は特になし(成功したら0・・・と考えていたのですが使い道が今のところはreturnだけです) ★で特に悩んでいるので、よろしくお願い致します。

  • 構造体から他の構造体への代入

    現在C言語で簡単なプログラミングを書いているのですが、 構造体(1)(下記参照)から、構造体(2)(下記参照)への代入の方法がわからず悩んでいます。もしよければ手を貸してください!! 標準関数などがないということはわかったので、 地道に代入を行いたいです。 イメージ・・・(data[n].b = moji[n].d;) (1)struct list_kouzou{ int a; char b[30]; char c[8]; }data[100]; (2)struct list_tai{ char d[30]; }moji[15];

  • 構造体リストの使い方について

    こんにちは。 断片データを受取ってから一旦復帰し、再びデータが送られ、全てのデータを受取った後に今まで受取った断片データを全てソートしたものを返却する関数を作成しようとしています。  断片データを保存する際には、動的に構造体領域を確保して実現しようと考えています。 まず、受け渡されるデータの形式は以下のようなものです。 グループA{A1,A2,A3…要素の数は可変} グループB{B1,B2,B3…要素の数は可変} グループC{C1,C2,C3…要素の数は可変} : グループの数は可変 ※グループの数と要素の数は、実際に受け渡されたデータの中身を見ないと分からない。 受け側では、まず 1.グループは新規グループか? を判定する。  ・新規グループなら、新規要素分の領域を動的確保し、新規構造体リストへ登録する。  ・既存グループなら、新規要素分の領域を動的確保し、対象となる構造体リストへリンクする。 2.グループの要素を全て受取ったら  ・構造体リスト内のデータをソートし、リンクを張りなおす。 上記1.2処理を、グループ全てを受取るまで繰り返す。 [質問内容] 1.グループが1つの場合は、1つの構造体を自己参照構造体にし、受け渡されるデータを次々と動的領域確保及び設定にて実現できそうなんですが、グループの数が可変のため、どう制御すればよいのか分かりません。仮に、グループ全体を管理するテーブル領域のようなものを用意し新規グループが発生するたびに、管理テーブルへ登録するというようなやり方は問題ないのでしょうか。また問題ない場合は、管理テーブルで可変領域を確保するにはどうすればよいのでしょう か。 2.1つの構造体リスト内をソートするアルゴリズムを記載したサイトなどありましたら、教えてください。 以上、説明不足のところもあるかもしれませんが、よろしくお願いします。

  • データベースの値を構造体へ代入

    VB.NETにてWindowsMobileの開発を行っています。 データベースへのアクセスに時間がかかるので、 最初にデータベースの値を全て構造体配列へ代入しておき、 最後に保存とした時にまたデータベースへ代入させるといったプログラムを組もうと思います。 その際に全てのフォームから構造体配列へアクセスさせたいのですが、 構造体配列をグローバル化させる方法はありませんでしょうか? ご教授のほどよろしくお願い申し上げます。

  • 構造体の代入と比較

    構造体のコピーは以下のようで正しいと思いますが、 struct A { int a; }; struct x, y; x.a=1; y = x; 構造体の比較は if (x != y)ではいけないのでしょうか? 構造体に限らずクラスも同じ考えでしょうか?

  • 構造体を型の異なる構造体に代入

    C言語初心者です。 今回の質問は入力された構造体のメンバのデータを型の異なる構造体に代入したいのですが、毎回コンパイラにおこられてしまいます(汗)具体的には typedef struct MSG{ longint type; int flg; int Dt[64]; }t_msg; このDt[64]を以下の構造体に代入します。 typedef struct SC_MSG{ char a; char b; short c; char d; char e; short f; }t_sc_msg; その際、異なる関数で処理するため、 main(){ foo(&t_msg); }; void foo(t_msg *pt_msgdt){ t_sc_msg = (*pt_msgdt+8); ココがエラーになってしまいます。 何か、根本的な間違いをおかしている気がします。 ご指導の方、宜しくお願いします。 ちなみにOSはLinuxでコンパイラーはgccです。

  • 構造体メンバへの代入

    とても初歩的なことなのですが、 typedef struct _X{ int x; }X[50]; と構造体を定義して X[0].x = 0; と0を代入しようとすると、「宣言が正しく終了していない」とエラーが出てしまいます。 これはなぜでしょうか? ちなみにMicrosoft Visual C++ 2005 Express Editionを使っています。

  • HOSTENT構造体を宣言する必要はないのですか?

    ネットワークプログラミングを勉強しているのですが,ソケットを用いた通信のサンプルで, HOSTENT *lphost として,HOSTENT構造体へのポインタを宣言して, lphost = gethostbyname(ホスト名の文字列); で,サーバーのアドレスをHOSTENT構造体にセットするとあります。 構造体へのポインタを宣言しても,構造体自体の領域は確保されないのではないかと思うのですが,gethostbyname関数が返すポインタは,いったい誰がどこに確保した領域を指しているのか,そしてその領域はいつまで保持されるのか,よく理解できません。構造体そのものを宣言せずに,それへのポインタを宣言し,それに関数の戻り値を代入するというのが,よく理解できないです。どなたか解説していただけると幸いです。

  • 構造体からレコードセットへの代入

    下のような構造体があり、その値をレコードセットに代入したいと思います。 構造体内の変数名とレコードセットのフィールド名が同じなので名前を 利用して簡潔に書けないかと思うのですが、これは可能でしょうか? '構造体 Type Product  Price As Long  Name As String  Size As Single End Type '変数の宣言 Dim Car As Product 'レコードセットへの代入 With Product  RS("Price").Value = .Price  RS("Name").Value = .Name  RS("Size").Value = .Size End With

  • 構造体のメンバ初期化について

    構造体のメンバを初期化したいのですが、 メンバ数が多いので1個ずつ初期化するのは面倒です。 そのため、一度に初期化する方法を探していたのですが、 memsetやZeroMemoryなどで可能だということが解りました。 しかし、パディング等の問題を含めて この関数を使用しても問題ないのでしょうか? 以下に例を挙げます。 typedef struct SAMPLE {  char a;  int b;  int c;  float d;  SAMPLE(){   ZeroMemory( this, sizeof(Sample) );  } } Sample; 構造体Sampleは32bitマシンでは 一見13byteに見えますが、パディングが入るので、 実際にはsizeof(Sample)は16byteと表示されます。 また、構造体には自動的に初期化と解放するための、 コンストラクタ・デストラクタのみがあり、 関数や仮想関数などの実装はありません。 この方法の安全性について、 ご存知の方がいらっしゃればアドバイスいただけると助かります。 よろしくおねがいします

専門家に質問してみよう