我在我的一个程序中使用可变参数函数。这是它的定义 -
std::string GetMessage(const char *format,...)
现在我想为用户提供额外的可行性,以提供他想要的纯字符串。
就像 - GetMessage("这是我的消息")
我在处理此类输入时遇到麻烦,带有变量的输入工作正常。
我尝试过
val_list vl;
va_start(vl,format);
if(strlen(vl) > 1) // TO check if va list has any arguments.
但它的行为非常不一致。
那么有人可以建议我更好的方法来了解可变参数函数是否有参数或没有参数吗?
最佳答案
调用者必须主动传递一些值,让被调用的 var/stdarg-using 函数知道参数结束的位置。常见技术包括:
- 传递标记值,例如尾随 NULL
- 通过计数
- 传递一个格式字符串,其中嵌入的内容(例如
printf()
等的%
前缀格式)暗示所需的参数数量
有时,您可以通过注入(inject)哨兵的宏来调用可变参数函数,从而促进可靠地使用它们,并且某些编译器允许您搭载其 printf()
样式参数检查(例如 GCC) .
关于c++ - 使用可变参数函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20561695/