2010-12-03 11 views
0

I次のコードをしました:Cの空でないvoid *ポインタに値を代入する正しい方法は何ですか?

void funcA(void* pArg) 
{ 
    STRUCTA abc; 
    . 
    . // Some processing here 
    . 

    if (pArg) 
     (STRUCTA *)pArg = abc; 
} 
問題は、このコードは次の警告を投げされている

: 警告:代入ない本当に左辺値の目標。これは私ができる、警告をエラーとして扱われていると私は私がvoidポインタデリファレンスをしようとしている別の警告...

を得るでしょう、キャストなしで将来

でハードエラーになりますこのコードを使ってはいけませんが、実際にvoid *以外のポインタ型は引数として使用できません。私は行方不明のエレガントなソリューションはありますか?

この方法を使用する方法はありますか?

答えて

4

STRUCTAにはSTRUCTAへのポインタを割り当てます。

むしろ行います

*((STRUCTA *)pArg) = abc; 
5

(STRUCTA *)pArgはポインタ型ですが、abcはありません。ポインタを逆参照する必要があります。

*(STRUCTA *)pArg = abc; 
+0

簡潔な返答をお寄せいただきありがとうございます...しかし、Benoitは正確に同じ説明で2分前に回答していたので、正しい答えとしてマークする必要がありました。 – TCSGrad

-1

EDIT:

pArg = (void *) (&abc);

+1

構造体をポインタにキャストすることは意味がありません。 –

+0

@Marcelo - あなたは絶対に正しいです。私はabcが始めるべき指針ではなかったという事実を忘れてしまった。 – ysap

1

この試してみてください:あなたはPARGポイントが割り当てられたメモリの(ABC)バイトはsizeofしていることを確認する必要がありますしかし

memcpy(pArg, &abc, sizeof(abc)); 

を。

+0

受け入れられた答えははるかにエレガントで、私が作っていた間違いを指摘しています... – TCSGrad

+0

まだ、memcpyはおそらくここに行く方法です。 *(..)= ..私の目にはエレガントではありません。 – buddhabrot

関連する問題