C++ 如何在va_start中使用字符串?
由于某些原因,我无法使其工作:C++ 如何在va_start中使用字符串?,c++,C++,由于某些原因,我无法使其工作: void examplefunctionname(string str, ...){ ... va_start(ap, str.c_str()); 我也没有得到这份工作: void examplefunctionname(string str, ...){ ... int len = str.length(); char *strlol = new char[len+1]; for(int i = 0; i <
void examplefunctionname(string str, ...){
...
va_start(ap, str.c_str());
我也没有得到这份工作:
void examplefunctionname(string str, ...){
...
int len = str.length();
char *strlol = new char[len+1];
for(int i = 0; i < len; i++){
strlol[i] = str[i];
}
strlol[len] = 0;
va_start(ap, strlol);
有人能告诉我如何使用string而不是const char*
吗
当我调用
examplefunctionname(“%d%d%d”,1337,1337,1337)
va_start
是一个使用第二个参数作为位置的宏,因此需要使用您给出的最后一个示例。来自文档:
va\u开始(va\u列表ap,最后)
。。。参数last
是变量参数列表前最后一个参数的名称,即调用函数知道其类型的最后一个参数
您在工作示例中正确地完成了这一点:
va_start(ap,str)
,并且str
是最后一个已知的参数。但在另外两个示例中,您将奇数传递给va_start
va_start需要前面的参数。这意味着您必须直接传入str,而不管它是什么类型。它不接受常量字符*,也不为您解析字符串。在函数接受字符串的示例中,为什么不使用va_start(ap,str)
?您应该在va_start
宏中使用参数的名称,而不是任意表达式。噢,该死,我以为它在那里读取字符串,所以它需要变量的地址。。。然后用它知道最后一个变量,然后循环到下一个?啊。。我现在看到了
void examplefunctionname(string str, ...){
...
va_start(ap, str);
void examplefunctionname(string str, ...){
...
va_start(ap, str);