gpt4 book ai didi

c - 将 char** 类型的数组作为 void** 类型的参数传递会给出意外警告

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:45 24 4
gpt4 key购买 nike

在函数中将指针数组 (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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com