使用C数组,传递给execv()

时间:2013-10-15 19:10:19

标签: c parameters execv

我有一个功能:

int exploreDIR (char stringDIR[], char arguments[6][100])
{    
     /*stuff...*/
     execv(filePath, arguments); 
}

但是,我得到了warning: passing argument 2 of ‘execv’ from incompatible pointer type

如果execv期望char* const argv[]为其第二个参数,为什么我会收到此警告?

由于数组与指向数组开头的指针基本相同,因此char arguments[][]char* const argv[]之间的关键区别是什么?

2 个答案:

答案 0 :(得分:1)

char arguments[6][100]是一个600字节的内存块,排列成6个100字节的段,而char* argv[]是一个指向内存段的指针数组,可以在任何地方。查看差异的一种方法是:arguments[i+1] - arguments[i]为100,而argv[i+1] - argv[i]可能为任何一种。

答案 1 :(得分:1)

您正在传递指针(*),如下所示:

*
`-> aaaa...aaaabbbb...bbbbcccc...cccc

它指向包含多个char[100]数组的内存。

该函数需要一个如下所示的参数:

*
`->***
   ||`-> cccc...cccc
   |`-> bbbb...bbbb
   `-> aaaa...aaaa

它需要一个指向包含多个char*的内存的指针。

这两种类型不同,无法自动转换。