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

C++ 如何识别最后一个变量参数?,c++,char,arguments,printf,variadic-functions,C++,Char,Arguments,Printf,Variadic Functions,因此,在我的函数中,我想要获取一个可变数量的字符指针 void myFunction(char *_Name, ...); 只是,当我遍历参数时,我的代码会中断,因为我不确定如何停止我传递的最后一个参数而不继续 void myClass::myFunction(char *_Name, ...) { char *a; std::vector<char*> names; va_list VariablePathList; va_start (V

因此,在我的函数中,我想要获取一个可变数量的字符指针

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);
}
void myClass::myFunction(char*\u Name,…)
{    
char*a;
std::矢量名称;
va_列表变量路径列表;
va_开始(变量路径列表,_名称);
a=_名称;
bool exitLoop=false;
而(!exitLoop)
{
姓名.安置(a);;
a=va_arg(变量路径列表,字符*);
//我必须做什么才能在正确的时间设置“exitLoop=true”?
}
va_端(可变路径列表);
}
假设我将两个char指针传递给myFunction,那么当va_arg调用不可读内存时,代码在第三个循环中中断

如果不告诉myFunction我给了它多少个agruments,它怎么能在代码中断之前找到设置exitLoop的数字呢

我似乎找不到关于printf()等如何实现这一点的直接信息,因此可能存在我想要的解决方案


真的,先谢谢你。

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`
}
#包括
#包括
样板
无效foo(T…args)
{    
std::向量名{args…};
//现在使用`名称`
}

()
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`
}
#包括
#包括
样板
无效foo(T…args)
{    
std::向量名{args…};
//现在使用`名称`
}
()这是很好的解释;关于这篇文章有什么不清楚的吗?…以及这个网站上许多相关问题的主题。这在上有很好的解释;这篇文章有什么不清楚的地方吗?…以及这个网站上许多相关问题的主题。