如何在C ++中传递多个字符串参数并将其作为参数传递?

时间:2014-06-23 04:37:54

标签: c++ visual-c++ c++builder

如何在不使用vector的情况下在C ++中传递多个字符串参数并将其作为参数传递?

我想做这样的事情。

void MyClass::go()
{
  check("string1","string2","string3");
}

//guessing
void check(string values,...)
{
 //how I can output each value here?
}

EDITED: 感谢您的回答,但我的目标是传递大小不均匀的字符串参数。这意味着我不需要为它的大小输入一些int。我不想使用矢量:)

4 个答案:

答案 0 :(得分:1)

在我看来,最好的解决方案是实际使用矢量。这样你就具有类型安全性,你可以传入任意数量的字符串。

您也可以使用可变参数模板。

如果您确切知道要传入多少个字符串,则可以拥有该字符串的参数列表。这是相当繁琐的,如果你改变主意,你需要重写你的功能(以及使用它的每个代码)。

var args的问题在于它不是类型安全的,编译器无法验证你想要将一串字符串传递给你的函数。

答案 1 :(得分:0)

void check (const string &string1, const string &string2, const string &string3)
{
    cout << string1 << " " << string2 << " " << string3 << endl ;
}

答案 2 :(得分:0)

在c&amp; c ++,这可以通过一个叫做变量参数的东西来实现。请注意,对于varargs,在调用函数时,您需要提供至少一个参数,即参数的字符串数。 变量参数有助于传递多个参数,而无需实际知道要传递的参数数量。

为此,您可以包含stdarg.h。这为您提供了数据类型:va_list和相关函数:

#include <cstdarg>
#include <iostream>

using namespace std;

void check ( int num, ... )
{
    va_list arguments;  //a place to store the arguments values

    va_start ( arguments, num );           // Initializing arguments to store all values after num

    for ( int x = 0; x < num; x++ ) {     // Loop until all numbers are added
      cout << va_arg ( arguments, string ); // Prints the next value in argument list to sum.
    } 

    va_end ( arguments );                  // Cleans up the list
}

void MyClass::go()
{
  check(3,"string1","string2","string3");
}

num是您提供的参数数量。

va_start使用您提供的参数(在本例中为字符串)填充va_list。

va_arg()用于访问列表中的那些参数。

最后,va_end()用于清理va_list。

答案 3 :(得分:0)

您可以在C ++ 11中使用va_list或可变参数模板。这取决于你的背景。