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…};
//现在使用`名称`
}
()这是很好的解释;关于这篇文章有什么不清楚的吗?…以及这个网站上许多相关问题的主题。这在上有很好的解释;这篇文章有什么不清楚的地方吗?…以及这个网站上许多相关问题的主题。