2017-07-19 66 views
0

我真的很困惑指针和数组的使用。 我想从命令行传递一些值到数组。我需要使用该阵列进行其他处理。将char ** arr转换为char * arr []

int main(int argc, char *argv[]) 
{ 
    std::vector<const char *> args {}; 
    args.insert(args.end(), argv+1, argv + argc); 

    const char **arr = args.data(); 
} 

这工作,但不是我想要的,原来的代码使用

const char *arr[] = {"some", "vaule", "here"}; 

我想传递arr中,而不是里面的代码分配的值。

我需要数组,但下面的代码不起作用。

const char *arr[] = args.data(); 

所以我想保持我的数组,因为其他处理,我该怎么做呢? 谢谢!

+0

args变量应该用一个构造函数而不是{}来初始化,这就是我的mingw-g ++版本所说的 –

+0

你真的需要'std :: vector'构造的可能性非常小。此外,你不能“将事情传递给数组”。如果你想处理你的命令行参数 - 就这么做;他们就在那里。如果你想迭代它们,你可以考虑['gsl :: span '](https://www.quora.com/What-is-the-span-T-in-the-CppCoreGuidelines)。 – einpoklum

回答

0

你在这里混淆了各种想法。

char * argv []是一个指向数组参数的指针,它们本身(因为它们是c'字符串)是字符数组。因此argv是一个二维数组。

变量赋值像

const char *arr[] = args.data(); 

不起作用,只能用一个静态列表像分配{“一些”,“vaule”,“这里”}

为了设置的值在arr内的值与argv相同,你需要循环argv并将字符串的值复制到arr中。

这可能会变得复杂,并且因为您使用C++编写代码,所以您可能还需要使用向量。

在那里你会做这样的事情:

std::vector<std::string> arr(argv + 1, argv + argc); 

在这种情况下,你将不得不包含在

希望那是你问的什么传递的参数值的向量。

+0

谢谢!我想我误解了char * argv []。 – koma

0

char **arr实际上是同一类型char *argv[] 可以直接给它:

const char **arr = argv; 

编译器可能会显示警告信息,但它应该编译。