C++ 将字符串数组传递给接受const char的函数**

C++ 将字符串数组传递给接受const char的函数**,c++,arrays,C++,Arrays,我有一个函数,它将常量字符**数组作为参数 void Foo(const char** bar); 我可以将一个常量字符*数组传递给它 const char *bar[2]; bar[0] = "test"; bar[1] = "me"; Foo(bar); // works fine 当'bar'是std::string数组而不是const char时,我也希望这样做* std::string bar[2]; bar[0] = "test"; bar[1] = "me"; Foo(ba

我有一个函数,它将常量字符**数组作为参数

void Foo(const char** bar);
我可以将一个常量字符*数组传递给它

const char *bar[2];
bar[0] = "test";
bar[1] = "me";

Foo(bar); // works fine
当'bar'是std::string数组而不是const char时,我也希望这样做*

std::string bar[2];
bar[0] = "test";
bar[1] = "me";

Foo(bar); // cannot convert argument 1 from 'std::string [1]' to 'const char **'

我知道如何将std::string转换为const char*。在上述情况下,我有什么办法可以做吗?你不能直接做

auto arr = std::vector<const char*>();
auto s1 = std::string("test");
auto s2 = std::string("me");
arr.push_back(s1.c_str());
arr.push_back(s2.c_str());

Foo(arr.data());
auto-arr=std::vector();
自动s1=标准::字符串(“测试”);
自动s2=std::字符串(“me”);
arr.push_back(s1.c_str());
arr.push_back(s2.c_str());
Foo(arr.data());

不确定您想要实现的目标,但在这里

// Example program
#include <iostream>
#include <string>

void Foo(const char** bar, int num) {
    while(num > 0) {
      std::cout << bar[--num] << std::endl << std::flush;
    }
}

const char** toCharArray(std::string* arr, int num) {
    // If we ever alloc with new with have to delete
    const char** buffer = new const char*[num];

    for(int i = 0; i < num; i++) {
        buffer[i] = arr[i].c_str();
    }

    return buffer;
}

int main()
{
    std::string bar[2];
    bar[0] = "test";
    bar[1] = "me";

    // Capture the result 
    const char** charBar = toCharArray(bar, 2);
    Foo(charBar, 2);

    // So we can free it later
    delete[] charBar;
}
//示例程序
#包括
#包括
void Foo(常量字符**条,整数){
while(num>0){

std::cout你的意思是写
const char*bar[2]={“test”,“me”};
const char*bar[0]=“test”
不会做你认为它会做的事。
std::string
数组与
const char*bar[2]有根本的不同
BTW..编译器是正确的,这样的内容是不可转换的。我编辑了post,这在很大程度上取决于Foo的期望。函数签名本身并不能说明契约的任何内容。如果您只想从字符串(&(bar.data())中得到一个常量字符**,就可以了