在函数中将指针数组 (char**) 作为 void** 类型的参数传递时出现警告。
下面是我的代码。我使用 gcc 编译器,它给了我这个警告:
"warning: passing argument 1 of 'print' from incompatible pointer type [enabled by default]".
它指向这一行 print(lineptr, 2);
另一个警告说:
warning: format '%s' expects argument of type 'char *', but argument 2 has type 'void *'.
它指向这一行 printf("%s\n", *v++);
我尝试用 char**
替换所有 void**
并且效果很好。
我想使用 void**
的原因是我正在编写一个可以接收字符或整数数组的快速排序函数。
#include <stdio.h>
char *lineptr[100] = {"mister", "x"};
void print(void **, int n);
int main()
{
print(lineptr, 2);
return 0;
}
void print(void **v, int n)
{
while( n-- > 0 )
printf("%s\n", *v++);
}
问题是:这个警告会影响什么吗?
现在,我可以毫无问题地运行代码并获得所需的输出,但我会问是否每次都能保证此方法运行良好。
提前致谢!
最佳答案
您可以将 char
数组转换为 void
:
print((void **)lineptr, 2);
通常最好注意警告并修复问题以避免未定义的行为。
关于c - 将 char** 类型的数组作为 void** 类型的参数传递会给出意外警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54029044/