在函数中传递指针数组(char **)作为void **类型的参数时,我有一个警告。
下面是我的代码。我使用gcc编译器,它给了我这个警告:
“警告:从不兼容的指针类型[默认启用]中传递'print'的参数1”。
它指向这条线 print(lineptr, 2);
另一个警告说:
警告:格式'%s'期望的参数类型为'char *',但是参数2的类型类型为'void *'。
它指向这条线 printf("%s\n", *v++);
我试图替换所有void**
与char**
和它工作得很好。
我要使用的原因void**
是我正在编写一个可以同时接收字符或整数数组的quicksort函数。
#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);
通常,最好注意警告并解决问题,以避免未定义的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句