数種類の構造体の関数を関数の引数に使う方法

[戻る]
2002/09/04(水) 11:17:57
現在ファイル書込みの関数を作成して引数として書込みデータを渡す作成しています。
しかし、メインで関数を使用して構造体(構造が違う書込みデータ長)を引数で渡そうとしてい
ますが
「N番目の引数を 'struct XXXX *' から 'char' に変換できません」
とエラーが発生します。
初心者でうまく説明できてませんが、どなたかお知恵をお貸しください。
よろしくお願いします。
例)
void    ErrLog_rtn(char ,int ); //ファイル書込み関数

struct A
{
    char a1[3];
    char a2[5];
} AAA;

struct B
{
    char b1[10];
    char b2[8];
} BBB;

main()
{

    ErrLog_rtn(&AAAA ,sizeof(AAAA) );
    ErrLog_rtn(&BBBB ,sizeof(BBBB) );
・・・・
}

PAI 2002/09/04(水) 11:51:02
>void ErrLog_rtn(char ,int );

このシグネチャではchar一文字(とintひとつ)しか渡せませんけど、
これであってますか?
ファイルへ複数文字書き出すのであれば、
char*でアドレスを渡すのではないですか?

以下char*であるとして話を進めます。

>&AAAA
これで確かに先頭アドレスが取れますが、そのときその先のメモリにあるデータは
AAAAの型であってcharじゃないですよね。
強引にそれをcharとして扱うなら

(char*)(&AAAA)

とすればいいのですが、それだと多分ごみが入ると思います。

charのポインタにはcharのポインタをわたしてやる必要があります。
ここでは(AAAAがAのインスタンスだとして)
AAAA.a1とAAAA.a2はcharのポインタなので(正確にはchar[3],char[5]ですが・・・)

ErrLog_rtn(AAAA.a1 ,sizeof(AAAA.a1) );
ErrLog_rtn(AAAA.a2 ,sizeof(AAAA.a2) );

とするべきではないでしょうか?

PAI 2002/09/04(水) 11:55:50
あ、バイナリで書くのかな?
だとErrLog_rtnがvoid*を受けるべきだと思うけど・・・

古いスレッドには追加発言できません。