これ何て呼びますか

共用体と構造体のファイル入出力の問題で、共用体の中の構造体を引数にしたいのですが、
設定方法が分からずにずっと悩んでいます。ご教授いただきたく、お願いいたします。

下記のまま、union *tbl で指定してあげることは出来たのですが、tbl.COM でやりとりすることは出来ないのでしょうか?
呼ぶ側:  &tbl.COM
呼び出す側:union *tbl.COM
では出来ませんでした。他にもいろいろ試しましたが、全てコンパイルエラーになってしまいます。
どちらもアドレスが同じ場合は出来ないということでしょうか?それとも私の指定の仕方がおかしいのでしょうか?
※全コードが長いため、簡単に書いてありますので、このままだとエラーになるかもしれません。
struct COM_DATA{
char tblName[4];
short comLen;
};

struct INDI_DATA{
short No;
short Fum;
};

union TBL{
struct COM_DATA COM;
struct INDI_DATA INDI;
};

int FileWrite( union *tbl );

main()
{
union TBL tbl;

if( ( FileWrite(tbl) ) == NG )
{
exit(1);
}
}

/* 1レコード分、ファイルを書き込む関数 */
int FileWrite( union *Tbl )
{
FILE *fp;

if( ( fp = fopen( "aa.dat", "w" ) ) == NULL )
{
printf( "%sのfopen error!\n", F_Name );
return NG;
}
if( ( fwrite( &tbl, 16, 1 ,fp ) ) != 1 )
{
printf( "%sのfwrite error!%d\n", F_Name );
return NG;
}
fclose(fp);
return OK;
}

A 回答 (1件)

>共用体の中の構造体を引数にしたい



共用体には2つの構造体がありますが、どちらを引数にしたいのでしょうか?
例えばCOM_DATA であるならば、
int main()
{
union TBL tbl;
FileWrite(&tbl.COM);
}
int FileWrite(struct COM_DATA *com)
{
fwrite(com, sizeof(struct COM_DATA), 1, fp);
}

共用体そのものを引数とするのであれば、
int main()
{
union TBL tbl;
FileWrite(&tbl);
}
int FileWrite(union TBL *tbl)
{
fwrite(tbl, sizeof(union TBL), 1, fp);
}
    • good
    • 0
この回答へのお礼

早速のご解答ありがとうございます!
指定する構造体は、COMの場合はcom.datへ、
INDIの場合はindi.datへと、両方使います。
引数としは、unionからではなくstructでアドレスを渡すんですね!早速試してみたいと思います!
本当にありがとうございます!

お礼日時:2004/05/30 05:16

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


おすすめ情報