将argv的元素复制到一个新数组中
copying elements of argv into a new array
我正在尝试制作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 as PySys_SetArgv(argc - 4, argv_new)
,以设置要传递给python的argv。然而,我得到以下错误:
无法转换‘char (*)[6]’ to ‘char**’ for argument ‘2’ to ‘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]);
}
(如果您愿意,可以用malloc(strlen(s)+1)
+strcpy()
替换strdup(s)
)
假设您只想跳过一些参数,另一个解决方案是构建一个指向参数字符串的新指针数组,以传递给它,而不是复制实际的参数字符串:
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);
相关文章:
- 如何将元素从向量转移到新数组?
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- std::transform 将一个结构数组复制到另一个结构数组
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 有没有办法创建一个花哨的迭代器和相应的新数组,以便检查每个索引的索引值的条件?
- 如何从函数返回的数组中创建一个新数组
- 在C++语言中,如何创建一个指向数组的指针的新对象?
- C++内存管理:从函数中的向量创建一个新数组
- 一个简单的向量,如何正确重新分配新数组的地址
- 什么是更快的:创建一个新数组或遍历现有数组
- C++将一个新数组传递给函数中的指针
- 一组数组添加到一个新数组
- 将argv的元素复制到一个新数组中
- C++取一个华氏温度数组,将其转换为摄氏度,然后将摄氏度添加到一个新数组中
- 返回一个指向新数组的指针
- 动态创建一个新数组,其中原始数组中的每个项被复制给定次数
- C++用std::vector的一些值创建一个新数组
- 返回一个具有指定值的新数组