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())中得到一个常量字符**,就可以了