如何在va_start中使用字符串?

时间:2011-01-10 15:49:24

标签: c++

出于某种原因,我无法让这个工作:

    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)

时输出随机数

4 个答案:

答案 0 :(得分:5)

来自文档:

  

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

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

答案 1 :(得分:1)

va_start需要上一个参数。这意味着你必须直接传入str,无论它的类型如何。它不需要const char *,也不会为你解析字符串。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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