所以我一直在尝试使用stdarg进行无限期的争论。对于int它工作得很好但现在我用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设置,所以这不是问题。
答案 0 :(得分:3)
您应该使用 type
参数来确定变量部分的类型。当您只传递一个参数时,您似乎正在访问两个一个U32
和一个char*
。
您需要以下内容:
if( type == stringType )
{
char *stringValue = va_arg(arg_list, char *);
print("got string '%s'\n", stringValue);
}
else if( type == u32Type )
{
/* ... */
}
答案 1 :(得分:2)
这两行
value = va_arg(arg_list, U32);
stringValue = va_arg(arg_list, char*);
您尝试从堆栈中获取两个值,但您只为va-list传递一个参数。这意味着当您尝试获取字符串时,您将跳到堆栈上的参数列表之外,并获得一个看似随机的指针。