• ベストアンサー

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

現在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];

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★アドバイス >標準関数などがないということはわかったので、  ↑  memcpy() 関数が利用できます。→回答者 No.2 さんを参考に。  strcpy() 関数も利用できるかも。→回答者 No.1 さんを参考に。  ※char b[]、char d[] が文字列ならば strcpy() 関数が利用できますが、何かのデータ   ならば安全のために memcpy() で配列全体をコピーします。データ内容によって決める。 >地道に代入を行いたいです。  ↑  ループを組んで代入したいのですか。  それなら下のサンプル関数などを作ってコピーしてみる。 サンプル関数: void listcopy( struct list_kouzou *data, struct list_tai *moji ) {  char *pdata = data->b; ←list_kouzou 構造体の char b[30] へのポインタ  char *pmoji = moji->d; ←list_tai 構造体の char d[30] へのポインタ  int i;    for ( i = 0 ; i < sizeof(data->b) ; i++ ){   *pdata++ = *pmoji++; ←地道にコピー  } } // 使い方 int main( void ) {  struct list_kouzou data[ 100 ];  struct list_tai moji[ 15 ];  int n;    /*  構造体 data、moji への代入処理  */  for ( n = 0 ; n < 15 ; n++ ){   listcopy( data[n], moji[n] ); ←イメージに近い処理(data[n].b = moji[n].d)  }  /*  その他の処理  */  return 0; }

1wase
質問者

お礼

大変にわかりやすい回答をありがとうございます。 これを参考に、がんばろうと思います!!!

その他の回答 (3)

noname#50176
noname#50176
回答No.3

代入に関数を使わない場合は、 #include <stdio.h> typedef struct list_kouzou{ int a; char b[30]; char c[8]; }data[100]; typedef struct list_tai{ char d[30]; }moji[15]; void main (void) { data a; moji b; unsigned int i,maxA,maxB,indexA=0,indexB=0; for (i=0,maxA=(maxA=sizeof(a[indexA].b)/sizeof(a[indexA].b[0]))<(maxB=sizeof(b[indexB].d)/sizeof(b[indexB].d[0]))?maxA:maxB;i-maxA;i++) a[indexA].b[i]=i+1; i^=i;while (i-maxA) b[indexB].d[i++]=a[indexA].b[i]; for (i=0;i<maxA;i++) printf("%d ",b[indexB].d[i]); printf("\r\n"); return; } のようにします。

1wase
質問者

お礼

回答ありがとうございます。大変に参考になりました。 少々難易度が高く感じられた(簡単であればすみません)ので、今後の参考にさせていただきたいと思います。

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

.bと.dが文字列とは限らないので... memcpy(data[n].b, moji[n].d, 30);

1wase
質問者

お礼

memcpyという関数があるのですね。 すみません、勉強不足でした。 '\0'がつかないというのは、大変に便利な関数を教えてくださいまして、ありがとうございます!

回答No.1

「イメージ」として書かれたとおりのことであれば、 strcpy(data[n].b, moji[n].d); で可能な気がします。

1wase
質問者

お礼

strcpyでは、あまり、うまく行かなかったのです。strcpyでも、構造体同士の代入が出来るのですね? どうも、ありがとうございます!

関連するQ&A

専門家に質問してみよう