首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将argv的元素复制到一个新的数组中。

将argv的元素复制到一个新的数组中。
EN

Stack Overflow用户
提问于 2014-09-05 10:14:23
回答 2查看 517关注 0票数 0

我正在尝试创建argv的一个新副本,然后将它传递给python PySys_SetArgv,在那里我得到了一个错误:

我的论点是:

代码语言:javascript
复制
./matrix -r 2 -c 2 -MIN 0 -MID 10 -UPPER 50 -MAX 100

我想要制作一个名为argv_new的argv的新副本,其中包含从-MIN开始,以100结尾的参数。我做到以下几点:

代码语言:javascript
复制
char argv_new[argc-4][6];
strcpy(argv_new[0],argv[0]);
cout << argv_new[0] << "\n";    
for(int j=5; j<argc; j++)
{
    strcpy(argv_new[j-4],argv[j]);
    cout << argv_new[j-4] << "\n";

}

我的产出如下:

代码语言:javascript
复制
./matrix
-MIN
0
-MID
10
-UPPER
50
-MAX
100

接下来,我尝试将这个argv_new传递到PySys_SetArgv as PySys_SetArgv(argc - 4, argv_new)中,以设置要传递给python的argv。但是,我得到了以下错误:

不能转换‘char (*)[6]’ to ‘char**’ for argument ‘2’ to ‘void PySys_SetArgv(int, char**)’

我不知道如何纠正这个错误。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-05 10:32:36

假设您只想跳过一些参数,另一个解决方案是构建一个指向参数字符串的指针数组,以传递给它,而不是复制实际的参数字符串:

代码语言:javascript
复制
char *argv_new[argc-4];
argv_new[0] = argv[0];
for(int j=5; j<argc; j++)
    argv_new[j-4] = argv[j];
PySys_Argv(argc-4, argv_new);
票数 0
EN

Stack Overflow用户

发布于 2014-09-05 10:37:34

指针数组(如argv )和二维数组是不一样的。在第一种情况下,argv、argv1等是真正的指针,可以指向完全不同的地址;在第二种情况下,是一个连续的内存块,其中索引被读取为对起始地址的偏移。因此,不可能成功地将其中一个转换为另一个。

要复制argv,我们必须这样做:

代码语言:javascript
复制
char *argv_new[argc-4];
argv_new[0] = strdup(argv[0]);

for(int j=5; j<argc; j++)
{
    argv_new[j-4] = strdup(argv[j]);
}

(如果您愿意,可以将strdup(s)替换为malloc(strlen(s)+1) + strcpy() )

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25683560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档