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

标签 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 (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);
}

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

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

我似乎无法找到有关 printf() 等如何执行此操作的直接信息,因此可能存在我所追求的解决方案。

真的,提前谢谢你。

最佳答案

printf 通过解析格式字符串来实现。其他一些函数通过在可变参数之前接受显式 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 )

关于c++ - 如何识别最后一个变量参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30570733/

相关文章:

powershell - 如何获取传递给函数的所有参数(与仅可选的 $args)

c++ - 用c++读写

c++ - 二进制表达式 ('std::ostream'(又名 'basic_ostream<char>')和 'const std::vector<int>' 的无效操作数)

python - 从 Pandas DataFrame 列中删除特定符号(unicode)

python - 使用继承的 python optparse 选项生成进程

具有多个隐式参数的函数文字

java - 编写基于客户端-服务器的游戏的建议

c++ - 没有匹配函数调用构造函数问题(关于类基础语法的问题)

C题: why char actually occupies 4 bytes in memory?

python - 如何在 ctypes 中传回指针?