如何在va_start中使用字符串?

问题描述:

出于某种原因,我不能得到这个工作:如何在va_start中使用字符串?

void examplefunctionname(string str, ...){ 
... 
    va_start(ap, str.c_str()); 

也没有我得到这个工作:

void examplefunctionname(string str, ...){ 
... 
    int len = str.length(); 
    char *strlol = new char[len+1]; 
    for(int i = 0; i < len; i++){ 
     strlol[i] = str[i]; 
    } 
    strlol[len] = 0; 
    va_start(ap, strlol); 

但确实:

void examplefunctionname(const char *str, ...){ 
... 
    va_start(ap, str); 

有人能告诉我如何我那里可以用字符串代替const char *

其输出的随机数,当我打电话examplefunctionname("%d %d %d", 1337, 1337, 1337)

+1

为什么不在函数接受`string`的例子中使用`va_start(ap,str)`?您应该在`va_start`宏中使用参数的名称,而不是任意的表达式。 – 2011-01-10 15:52:57

从文档:

va_start(va_list ap, last) ...参数last是可变的参数列表,即最后一个参数,它的调用函数知道的类型前的最后一个参数的名称。

您在您的工作示例中已正确完成此操作:va_start(ap, str)str是最后一个已知参数。但在另外两个例子中,你将奇怪的东西传递给va_start

va_start是使用第二个参数作为位置的宏,因此你需要用你给的最后一个例子。

va_start需要先前的参数。这意味着你必须直接传递str,而不管它是什么类型的。它不需要一个const char *,它不会为你解析字符串。

void examplefunctionname(string str, ...){ 
... 
va_start(ap, str);