現在ファイル書込みの関数を作成して引数として書込みデータを渡す作成しています。
しかし、メインで関数を使用して構造体(構造が違う書込みデータ長)を引数で渡そうとしてい
ますが
「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) );
・・・・
}
>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) );
とするべきではないでしょうか?
あ、バイナリで書くのかな?
だとErrLog_rtnがvoid*を受けるべきだと思うけど・・・