数種類の構造体の関数を関数の引数に使う方法 – プログラミング – Home

数種類の構造体の関数を関数の引数に使う...
 
通知
すべてクリア

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


ゆ
 ゆ
(@ゆ)
ゲスト
結合: 23年前
投稿: 1
Topic starter  

現在ファイル書込みの関数を作成して引数として書込みデータを渡す作成しています。
しかし、メインで関数を使用して構造体(構造が違う書込みデータ長)を引数で渡そうとしてい
ますが
「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
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

>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
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

あ、バイナリで書くのかな?
だとErrLog_rtnがvoid*を受けるべきだと思うけど・・・


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました