アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在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 回答 (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;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/21 17:25

代入に関数を使わない場合は、



#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;
}

のようにします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/21 17:34

.bと.dが文字列とは限らないので...



memcpy(data[n].b, moji[n].d, 30);
    • good
    • 0
この回答へのお礼

memcpyという関数があるのですね。
すみません、勉強不足でした。

'\0'がつかないというのは、大変に便利な関数を教えてくださいまして、ありがとうございます!

お礼日時:2007/06/21 17:18

「イメージ」として書かれたとおりのことであれば、


strcpy(data[n].b, moji[n].d);
で可能な気がします。
    • good
    • 0
この回答へのお礼

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

どうも、ありがとうございます!

お礼日時:2007/06/21 17:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!