我收到此警告:incompatible pointer types passing 'char (*)[1024]' to parameter of type 'char *'
我的代码如下所示:
myfunc(char* sString, size_t s_tString)
{
memset(sString, '\0', s_tString);
...
fPipe = (FILE *)popen (sString, "r");
...
}
int main()
{
...
char sString[1024];
myfunc(&sString, sizeof(sString));
...
}
调用 myfunc sString 后具有我期望的值,但编译器抛出该警告...在询问了一些同事后,我明白了为什么我收到该警告,但我们不知道为什么代码仍然有效。
我正在寻找为什么会发生这种情况的解释,修复方法非常简单,从调用中删除 & 。
最佳答案
如果您使用sString
,它将衰减为指向其第一个元素的指针,即&sString[0]
,其类型为char *
.
当您使用&sString
时,您将获得一个指向数组的指针,其类型为char (*)[1024]
。
这两个指针在语义上非常不同,但幸运的是,它们都指向相同的位置,因此您调用的函数可以按预期工作。
要解决该警告,请在调用中删除地址运算符 &
,因此只需这样做
myfunc(sString, sizeof(string));
// ^
// Note: No & here
关于c - 为什么我的指针类型不兼容,但代码仍然有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42506798/