我完全坚持如何将char fileParameters[10][10]
的一个函数的输出转换为*argv[]
的格式,以传递到另一个需要argv
格式的函数。这样做的目的是通过解析命令行输入的同一解析器传递文件输入。
我理解argv
是一个指针数组但我感到困惑,因为并非所有数组都指向第一个元素?
因此,fileParameters[10][10]
是一个指向指针的指针,如果使用&
获取地址,那么我期望一个指针数组?我已经尝试了一切,无论我做什么都会导致段错误。
任何正确方向的推动都会受到赞赏。
答案 0 :(得分:1)
我理解argv是一个指针数组但我很困惑所有数组都是指向第一个元素的指针?
没有。数组可以隐式转换为指向第一个元素的指针,但它们不是同一个东西。您可以轻松地告诉我,在char a[10];
之后,sizeof a
将提供10
而不是sizeof(char*)
。你的char[10][10]
是一个数组数组,而不是一个指针数组。
您需要将数组转换为指针数组:
char fileParameters[10][10];
// ...
char *fileParameterPtrs[10];
for (int i = 0; i != 10; i++)
fileParameterPtrs[i] = fileParameters[i];
然后你可以将fileParameterPtrs
传递给期望指针数组的代码。
@Vasfed正确地补充说你提到“期望argv
的格式相同”。这并不仅仅意味着任何指针数组,它意味着由NULL
终止的指针数组。您的原始fileParameters
无法保留任何NULL
值,因此您需要自己添加一个。{1}}。如果填写了所有10个参数,则只需将fileParameterPtrs
的长度更改为11
并再添加一个分配即可。如果您有其他方法可以跟踪使用了多少fileParameters
,请相应地调整代码。