我真的对指针和数组的用法感到困惑。我试图将一些值从命令行传递给数组。我需要使用数组进行其他处理。
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();因此,我想保持我的数组像这样,因为其他的处理,我怎么做呢?谢谢!
发布于 2017-07-19 18:13:21
你在这里混淆了各种各样的想法。
char * argv[]是指向参数数组的指针,这些参数本身(因为它们是c‘字符串’)是字符数组。因此,argv是一个二维数组。
变量赋值
const char *arr[] = args.data(); 不工作,只能使用静态列表赋值,如{“一些”、"vaule“、”这里“}
为了将arr中的值设置为与argv相同的值,您需要遍历argv并将字符串的值复制到arr中。
这可能会变得很复杂,而且由于您是用c++编写的,所以您最好使用向量。
你会做这样的事情:
std::vector<std::string> arr(argv + 1, argv + argc);在这种情况下,您将得到一个包含传入的参数值的向量。
希望这就是你想要的。
发布于 2017-07-19 18:22:07
char **arr实际上与char *argv[]的类型相同,您可以直接分配它:
const char **arr = argv;编译器可能会显示警告,但它应该编译。
https://stackoverflow.com/questions/45197929
复制相似问题