这个 header 文件有什么问题?

What is wrong with this header file?

我是 C 的新手,正在开始学习 header 文件。在使用我的 header 时,我收到一条错误消息 invalid type argument of '->' (have struct dirent)。我不明白这是什么意思,我读到 here-> 的第二个参数必须是一个指针,所以我试图向它添加一个 *ent->*d_name)然而,我得到了错误的意外标记 *,我该如何解决这个问题?

#ifndef UTILIS_H_INCLUDED
#define UTILIS_H_INCLUDED "utilis.h"
#include <stdio.h>
#include <dirent.h>

char *connect(const char *pattern)
{
    struct dirent ent;
    char *d_name;

    DIR *mgt = opendir("\\example\windows7apps");

    while ((ent = readdir(mgt)) != pattern)
    {
        puts(ent->d_name);
    }
}

#endif

I read here that the second argument to -> must be a pointer,

不对,"first"参数,或者说,->运算符的操作数实际上应该是指针类型。

在您的例子中,ent 不是指针类型,因此您不能使用指针成员取消引用运算符 ->。 (您可以使用成员取消引用运算符 . 代替 )。

实际上,在您的代码中,ent 应该是一个指针,根据 readdir() 的 return 类型。所以你最好将 ent 的类型更正为 struct dirent *,然后你可以在 ent.

上使用 ->

通常头文件只包含数据定义和函数原型。您的函数定义几乎肯定在 C 文件中。

如果你查看函数 readdir 它 returns 一个指向 struct dirent 的指针所以你的变量 ent 应该是一个指针 结构 dirent *readdir(DIR *dirp);

struct dirent *ent;

这将修复您的错误invalid type argument of '->' (have struct dirent)