2010-12-03 2 views
0

나는 다음과 같은 코드를했습니다 :C에서 비어 있지 않은 void * 포인터에 값을 할당하는 올바른 방법은 무엇입니까?

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

    if (pArg) 
     (STRUCTA *)pArg = abc; 
} 
문제가,이 코드는 다음과 같은 경고를 던지고있다

: 경고 : 할당 정말 좌변의 대상; 이 경고가 오류로 취급됨에 따라

, 내가 할 수있는 ... 내가 무효 포인터 역 참조하기 위해 노력하고있어 또 다른 경고를 얻을 것이다, 캐스트없이 미래

에 하드 오류가 될 것입니다 이 코드를 사용하지 마라. -하지만 실제로 void *와 다른 포인터 타입을 인자로 사용할 수 없다. 내가 누락 된 우아한 해결책이 있습니까?

이 방법을 만들 수있는 방법이 있습니까?

답변

4

STRUCTASTRUCTA에 대한 포인터를 할당합니다.

오히려 수행

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

(STRUCTA *)pArg은 포인터 유형이고 abc은 그렇지 않습니다. 포인터를 역 참조 할 필요가 있습니다.

*(STRUCTA *)pArg = abc; 
+0

간결한 답장을 보내 주셔서 감사합니다 ... 그러나 Benoit은 정확히 같은 설명으로 2 분 전에 답했기 때문에 올바른 대답으로 표시해야했습니다! – TCSGrad

-1

pArg = (void *) abc;?

편집 :

pArg = (void *) (&abc);?

+1

구조체를 포인터에 캐스트하는 것은 의미가 없습니다. –

+0

@Marcelo - 너는 맞다. 나는 abc가 시작하는 포인터가 아니었다는 사실을 놓쳤다. – ysap

1

이 시도 :

당신이 pArg 포인트는 할당 된 메모리 (ABC) 바이트를 sizeof 할 수 있는지 확인해야합니다 그러나
memcpy(pArg, &abc, sizeof(abc)); 

.

+0

받아 들여진 대답은 훨씬 더 우아하고 내가 만든 실수를 지적합니다 ... – TCSGrad

+0

여전히, memcpy는 아마 여기 갈 길입니다. * (..) = .. 내 눈에는 우아하지 않습니다. – buddhabrot

관련 문제