有一个函数my_init(...)使用可变参数列表。这个列表的长度是未知的,但最多有100个,元素总是char数组(意味着纯C的字符串)。未知长度的可变参数列表的问题
这就是我试图把它们解码:
void my_init(...)
{
va_list vl;
int tagCnt,tagLen=100;
char *listTag,*listValue;
va_start(vl,tagLen);
for (tagCnt=0; tagCnt<50; tagCnt++)
{
listTag=va_arg(vl,char*);
if (listTag==0) break;
listValue=va_arg(vl,char*);
... // do some usefult things here
}
va_end(vl);
}
...我调用这个函数是这样的:
my_init("tag1","value1",
"tag2","value2",
0);
因此,可以一直对和一个列表的末尾标不幸的是,my_init()在调用va_start()后失败,包含一些与输入参数无关的废话,并且对va_arg()的调用返回无效指针。那么我的代码有什么问题?
上面给出缩短了一点,所以可能不会编译代码...
谢谢!
============================================== ====================================
编辑:
我改变了代码和调用这种方式:
从使用的头文件,现在我得到我的VL,stdargs.h或varargs.h中其他垃圾不有所作为void my_init(int dummy,...)
{
va_list vl;
int tagCnt,tagLen=100;
char *listTag,*listValue;
va_start(vl,dummy);
for (tagCnt=0; tagCnt<50; tagCnt++)
{
listTag=va_arg(vl,char*);
if (listTag==0) break;
listValue=va_arg(vl,char*);
... // do some usefult things here
}
va_end(vl);
}
my_init(0,
"tag1","value1",
"tag2","value2",
0);
独立...
你包含什么头文件来定义va_ *宏?它是stdarg.h吗?可能varargs.h可以帮助吗? –
您是否尝试编译没有进行优化? –
是的,它的Debug-Build没有任何优化 - 但这不应该有影响,发布版本也应该工作!? – Elmi