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

struct{
char a;
char b;
} test01_t

struct{
char c;
char d[3];
} test02_t

struct{
test01_t test01;
test02_t test02;
}


書き込み先の領域の先頭アドレス
char* Addr;

データ構造が以下になっている状態で、
struct{
test01_t test01;
test02_t test02;
}

test01_t test01の領域には書き込まず
test02_t test02の情報だけ
領域にmemcpyまたはその他の方法で書き込みむにはどうしたらよいでしょうか?

よろしくお願い致します。

A 回答 (2件)

…………下記の間違い…ですよね?


struct test01_t {
char a;
char b;
};

struct test02_t {
char c;
char d[3];
};


>struct{
>test01_t test01;
>test02_t test02;
>}
にタグ名などがないのが難しいところでしょうかねぇ……。
タグ名などついていれば、Addrをキャストするなり方法があるかと思いますが。

Addrをstruct test01_t *にキャストして+1する…なんて無茶もなくはないでしょうが、
正しく動作してくれる保証はありませんしね。
# 構造体アライメントでパディングが詰められている可能性もありますし。

というワケで私ならば、「タグ名つけて正しくアクセスできるようにする」ってところでしょうか。

struct test03_t {
test01_t test01;
test02_t test02;
};
で、
((struct test03_t *)(Addr))->test02
かな。
    • good
    • 0

typedef struct{/*typedef追加*/


char a;
char b;
} test01_t;/*;追加*/

typedef struct{/*typedef追加*/
char c;
char d[3];
} test02_t;/*;追加*/

struct{
test01_t test01;
test02_t test02;
}test;/*変数名と;追加*/

char* Addr;

の場合は「memcpy(&test.test02,Addr,sizeof(test.test02));」です。
    • good
    • 0

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