您似乎在使用数组时遇到了一些问题。正如 Brian 指出的那样,数组索引从 0 开始,而不是 1。因此,您的两个 strings 是 string_array[0] 和 string_array[1],not string_array[1] 和 string_array[2]。
另外,如果您的函数采用参数const char* cstring_array,那么您的变量char* cstring_array[2] 可能不是您想要的。如果你按原样传递它,你实际上将传递一个char**,而不是char*,因为你可以认为一个数组的名称等同于一个指向它的第一个元素的指针。
当您提出问题时,您可以执行以下操作(更正索引错误,并假设您提到的函数称为 myFunction):
...
cstring_array[0] = string_array[0].c_str( );
cstring_array[1] = string_array[1].c_str( );
myFunction (cstring_array[0]);
myFunction (cstring_array[1]);
...
但是,根本不需要cstring_array 的更简单的等价物是:
...
myFunction (string_array[0].c_str( ));
myFunction (string_array[1].c_str( ));
...
或者,如果您的意图是传递一个包含两个字符串的 char 数组(这是我对问题的解释的可能性),那么您真正想要做的是您想要生成一个字符串是你原来的两个的串联:
...
std::string str = string_array[0] + string_array[1];
myFunction (str.c_str( ));
...
希望有帮助!
编辑:考虑到自从我写这篇文章以来出现的 cmets,我想说第一个例子接近你所需要的。我会执行以下操作(其中 N 是任一数组中的条目数):
...
for (int i = 0; i < N; i++)
cstring_array[i] = string_array[i].c_str( );
myFunction (cstring_array);
...
这是唯一可行的方法。没有标准函数(AFAIK),给定string 的数组将给出char* 的数组。我怀疑原因是:
- 这不是需要经常做的事情,因此很少需要广泛使用这样的功能。
- 如果有这样的功能,无论如何它很可能与上面的非常相似,在这种情况下它是如此琐碎以至于没有必要。
基本上,要回答您的问题,我认为没有更有效的方法,即使有标准库函数可以做到这一点,它无论如何都会使用这种方法。