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

标签 c eclipse sublimetext3

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

相关文章:

c - 有没有办法使用低电平输出来输出 ANSI 转义序列?

c - 为什么排序函数不对结构进行排序?

c - 为子进程分配内存并与父进程共享

java - 我的 Android 应用程序在 Java 中的启动器图标出现问题

eclipse - 有没有一个Eclipse插件可以替代Putty、WinScp等外部工具的使用

python - 将 Sublime 3 的 Python Build 更改为使用 py 而不是 python 作为命令

c - 变量声明很昂贵吗?

java - 为 javax.persistence 编写 Maven 依赖项

javascript - 带有 php 的 SublimeLinter javascript

editor - 将 Sublime Text 3 与 FTP 连接并通过固定用户界面显示文件夹结构