C * argv []和char数组[] []

时间:2016-02-07 09:12:17

标签: c arrays pointers

我完全坚持如何将char fileParameters[10][10]的一个函数的输出转换为*argv[]的格式,以传递到另一个需要argv格式的函数。这样做的目的是通过解析命令行输入的同一解析器传递文件输入。

我理解argv是一个指针数组但我感到困惑,因为并非所有数组都指向第一个元素?

因此,fileParameters[10][10]是一个指向指针的指针,如果使用&获取地址,那么我期望一个指针数组?我已经尝试了一切,无论我做什么都会导致段错误。

任何正确方向的推动都会受到赞赏。

1 个答案:

答案 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,请相应地调整代码。