c - 代码编译后从不兼容的指针类型赋值

标签 c

我最近一直在学习C编程并编写一些代码。下面是我写的代码:

#include <stdio.h>

int main(int argc, char ** argv){


    int num[] = {10, 15, 25, 30, 45, 10};
    char *names[][11] = {"Drew", "Larry Page", "Seggy", "Mark"};
    //int *ip, i = 0;
    char **ip;
    int *p, i = 0, j = 0;

    for (ip = names; *(ip + i); i++)
        printf("%s ", *(ip + i));
    printf("\n\n");

    for (p = num; j < sizeof(num)/sizeof(num[0]); j++)
        printf("%d ", *(p + j));
    printf("\n");
    return 0;
}

当我构建并运行上面的代码时,我得到了我想要的结果。但是我收到这个警告:

jdoodle.c:12:13: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
     for (ip = names; *(ip + i); i++)
             ^

我已经在各种 IDE 上测试了代码,但得到了类似的警告。感谢协助。

最佳答案

问题出在这一行:

char *names[][11] = {"Drew", "Larry Page", "Seggy", "Mark"};

你不需要指向 char 的二维指针数组,你想要一个指向 char 的指针数组:

char *names[] = {"Drew", "Larry Page", "Seggy", "Mark"}; /* Don't hardcode 11 */

关于c - 代码编译后从不兼容的指针类型赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50113098/

相关文章:

错误的 fprintf 的 C++ 等价物

c - 处理非常大的输入集的子集和问题的有效方法

c - 通过签名查找函数时如何知道地址范围?

需要 C 标识符吗?

c - 如何避免使用gcc在c中包装输入数据?

Cblas_sgemm 产生错误的结果

java - fread() 读取零值

c - ARM-内核测试模块

在 C 中动态分配的数组上调用 free() 似乎正在更改存储在另一个数组中的数据?

c - scanf() 不接受多个输入