2013-04-16 3 views
0

그래서 저는 무기한 인수로 stdarg를 사용하려고했습니다. int는 위대한 작품을하지만 지금은 숯 포인터로 이것을 시도하고있다. 이건 내 코드입니다 :stdarg.h char 포인터를 처리하지 않습니다.

void updateValue(char *parameter, parameterTypes type, ...) 
    { 
     va_list arg_list; 
     U32 value; 
     char* stringValue; 

     va_start(arg_list, type); 
     value = va_arg(arg_list, U32); 
     stringValue = va_arg(arg_list, char*); 
     va_end(arg_list); 
     printf("\n\n%s\n\n", stringValue); 
    } 

나는 간단하게 사용이 함수를 호출 할 때

updateValue("name", stringType, "TestingVaArg"); 

첫 번째 두 개의 매개 변수 목록의 매개 변수와 그것의 유형의 이름입니다을. 이것은 stdarg 설정 없이도 작동하므로 문제는 아닙니다.

답변

3

type 인수를 사용하면 가변 부분의 유형을 파악할 수 있습니다. 단일 인수 만 전달하는 경우 U32char* 모두에 액세스하는 것 같습니다.

당신은 같은 필요 : 나는 그것을 변경

if(type == stringType) 
{ 
    char *stringValue = va_arg(arg_list, char *); 
    print("got string '%s'\n", stringValue); 
} 
else if(type == u32Type) 
{ 
/* ... */ 
} 
+0

물론! thnx 남자! – flexzican

2

value = va_arg(arg_list, U32); 
stringValue = va_arg(arg_list, char*); 

당신이 스택에서 값을 얻으려고이 두 라인

,하지만 당신은 단지 VA-목록 하나 인수를 전달합니다. 즉, 문자열을 가져 오려고하면 스택의 매개 변수 목록을 벗어나 겉으로보기에 무작위 인 포인터가 나타납니다.

+0

흠을 실제로 이것이이 모든 라이브러리가 무의미하지 않고 작동? 그래서 내가 int 나 char *를 전달하려고 할 때 사용할 수 없다. – flexzican

+0

@flexzican'va_arg' "function"은 호출 할 때 다음 인수를 가리 키도록 _modifies_marg_list를 만듭니다. 'va_arg'를 호출 할 때마다 다음 인수를 얻습니다. 그리고 타입을 사용하여'arg_list'를 얼마만큼 수정할지 결정합니다. –

관련 문제