- ベストアンサー
構造体から他の構造体への代入
現在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];
- みんなの回答 (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; }
その他の回答 (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; } のようにします。
お礼
回答ありがとうございます。大変に参考になりました。 少々難易度が高く感じられた(簡単であればすみません)ので、今後の参考にさせていただきたいと思います。
- jacta
- ベストアンサー率26% (845/3158)
.bと.dが文字列とは限らないので... memcpy(data[n].b, moji[n].d, 30);
お礼
memcpyという関数があるのですね。 すみません、勉強不足でした。 '\0'がつかないというのは、大変に便利な関数を教えてくださいまして、ありがとうございます!
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
「イメージ」として書かれたとおりのことであれば、 strcpy(data[n].b, moji[n].d); で可能な気がします。
お礼
strcpyでは、あまり、うまく行かなかったのです。strcpyでも、構造体同士の代入が出来るのですね? どうも、ありがとうございます!
お礼
大変にわかりやすい回答をありがとうございます。 これを参考に、がんばろうと思います!!!