我有一个功能:
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[]
之间的关键区别是什么?
答案 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*
的内存的指针。
这两种类型不同,无法自动转换。