Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在va_start中使用字符串?_C++ - Fatal编程技术网

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);