2013-10-15 40 views
2

我有一个函数:使用C数组时,传递到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[]之间的关键区别是什么?

+3

没有错'execv(文件路径,参数); ','arguments'应该NULL终止,但'参数[6] [100]'不能为空终止'参数[I]'是一个有效的地址!= NULL –

+0

我很困惑,如何解决这里?我认为,通过使大小为6的参数(其中我只计划,以填补他们的5)最后一个值将是一个空指针,从而导致终止。这是错的吗? –

+1

阅读:[?字符* STR [1]'和'之间的区别'焦炭海峡[] []'和记忆都如何存储(http://stackoverflow.com/questions/17564608/what-does-the-array -name-mean-case-of-char-pointers/17661444#17661444) –

回答

1

你传递一个指针(*)看起来像这样:

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

它指向包含几个char[100]阵列存储。

函数需要找一个这样的说法:

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

它想要的指针指向的内存包含若干char*

这两种类型是不同的,并且不能被自动转换。

1

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