コード:
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 *
もちろん、この例は何の役にも立ちません。これは、最小限のコードで例を提供するために関係のないコードをすべて削除したためです。