2

我有一个功能:

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[]

4

2 回答 2

1

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

于 2013-10-15T19:16:23.023 回答
1

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

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

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

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

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

它需要一个指向包含多个char*.

两种类型不同,不能自动转换。

于 2013-10-15T19:20:30.650 回答