【问题标题】:warning: assignment from incompatible pointer type [enabled by default]警告:来自不兼容指针类型的赋值[默认启用]
【发布时间】:2014-08-12 12:13:21
【问题描述】:

终端说这是这一行的警告:

警告:来自不兼容指针类型的赋值[由 默认]

while ((dirzeiger=readdir(dir)) != NULL)

我找不到错误...

void ls () {

struct dirent {

    long d_ino;
    unsigned short d_reclen;
    unsigned short d_namlen;
    char *d_name;
};

DIR *dir;

struct dirent *dirzeiger;

if ((dir =opendir("/home/Bernardinho/Schreibtisch")) != NULL)

  while ((dirzeiger=readdir(dir)) != NULL)

     printf("%s\n",(*dirzeiger).d_name);

}

int main( int argc, char* argv) {

ls();

return 0;

}

【问题讨论】:

    标签: c pointers variable-assignment


    【解决方案1】:

    正如@Mr.32 所说,您忘记包含必要的头文件。此外,您似乎重新定义了结构dirent。因此,readdir 认为的 dirent 与您的 dirent 不同,并且指针不兼容。

    【讨论】:

    • 但我添加了标题 #include 。你能告诉我如何让它们兼容吗?
    • @BernardDarrilOungouande 如果您包含了正确的标题,则不需要重新定义结构。
    【解决方案2】:

    你忘了包含

    #include <dirent.h>
    

    如果不包含头文件,则任何带有隐含声明的函数都将返回整数类型。因此 readdir() 将被视为 int 的返回类型,并且您将其返回存储在指针中,因此您会收到该警告。

    添加头文件后可以看到没有任何警告。

    http://codepad.org/2YZWcrVP

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 2016-09-16
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多