如何识别最后一个变量参数?

时间:2015-06-01 10:08:14

标签: c++ char arguments printf variadic-functions

所以在我的函数中我想要使用可变数量的char指针。

void myFunction(char *_Name, ...);

只有当我遍历参数时,我的代码会中断,因为我不确定如何停止我传递的最后一个参数而不继续。

void myClass::myFunction(char *_Name, ...)
{    
    char *a;
    std::vector<char*> names;
    va_list VariablePathList;
    va_start (VariablePathList, _Name);

    a = _Name;

    bool exitLoop = false;
    while(!exitLoop)
    {
        names.emplace_back(a);
        a = va_arg(VariablePathList, char *);

        //what must I do to set "exitLoop = true" at the right time?
    }

    va_end (VariablePathList);
}

假设我将两个char指针传递给myFunction,当va_arg调用不可读的内存时,代码在第三个循环中断开。

在没有告诉myFunction我给它多少个agruments它怎么能找到在代码中断之前设置exitLoop的数字?

我似乎无法找到关于printf()等如何做到这一点的直接信息,因此可能存在我所追求的解决方案。

真的,提前谢谢你。

1 个答案:

答案 0 :(得分:4)

printf通过解析格式字符串来完成它。其他一些函数通过在varargs之前接受显式count参数来完成它。哪种方式取决于您的具体需求。

但是,现在是2015年,所以你应该使用可变参数模板而不是古老的C习俗。我也绝对不建议将char*存储在容器中。

以下是您需要的所有

#include <vector>
#include <string>

template <typename... T>
void foo(T... args)
{    
    std::vector<std::string> names{args...};
    // now use `names`
}

live demo