コード:
union foo
{
char c;
int i;
};
void func(void * src)
{
union foo dest;
memcpy(&dest, src, sizeof(union foo)); //here
}
私がfunc()このように呼び出すと:
int main()
{
char c;
int i;
func(&c);
func(&i);
return 0;
}
の呼び出しfunc(&c)で、 のサイズcが より小さいのはsizeof(union foo)危険ですよね?
の行はmemcpy正しいですか?そうでない場合、それを修正する方法は?
私が欲しいのは、へのポインターをmemcpyコピーするための安全な呼び出しです。void *union
ちょっとした背景: これは非常に複雑な関数から抽出されたものであり、パラメーターをfunc()含めることの署名は私の手に負えません。void *もちろん、この例は何の役にも立ちません。これは、最小限のコードで例を提供するために関係のないコードをすべて削除したためです。