gpt4 book ai didi

python - 将 argv 的元素复制到新数组中

转载 作者:行者123 更新时间:2023-11-28 06:42:38 28 4
gpt4 key购买 nike

我正在尝试制作 argv 的新拷贝,然后将其传递给 python PySys_SetArgv,但出现错误:

我的 argv 参数是:

./matrix -r 2 -c 2 -MIN 0 -MID 10 -UPPER 50 -MAX 100

我想制作一个名为 argv_new 的 argv 的新拷贝,其中包含从 -MIN 开始到 100 结束的参数。我按如下方式完成此操作:

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";

}

我的输出如下:

./matrix
-MIN
0
-MID
10
-UPPER
50
-MAX
100

接下来我尝试将此 argv_new 传递给 PySys_SetArgv 作为 PySys_SetArgv(argc - 4, argv_new) 以设置要传递给 python 的 argv。但是我收到以下错误:

无法将参数“2”的 “char (*)[6]”转换为“char**”到“void PySys_SetArgv(int, char**)”

我不确定如何修复此错误。任何帮助将不胜感激。

最佳答案

指针数组(如 argv 是)和二维数组不同。在第一种情况下,argv[0]、argv[1] 等是可以指向完全不同地址的实际指针,在第二种情况下,它是一个连续的内存块,其中索引只是作为起始地址的偏移量读取。因此不可能成功地将一个转换为另一个。

要复制 argv,您必须这样做:

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() )

关于python - 将 argv 的元素复制到新数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25683560/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com