这个头文件有什么问题?

时间:2017-04-07 12:48:31

标签: c pointers structure readdir

我是C的新手,我开始学习头文件。在使用我的标题时,我收到错误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

2 个答案:

答案 0 :(得分:3)

  

我在这里读到第二个参数 - &gt;必须是指针,

那是错的,&#34;第一&#34;参数,或者,实际上,->运算符的操作数应该是指针类型。

在您的情况下,ent不是指针类型,因此您不能使用指针成员解除引用运算符->。 (您可以使用成员解除引用运算符.代替)。

实际上,在您的代码中,ent应该是一个指针,根据readdir()的返回类型。因此,您最好将ent的类型更改为struct dirent *,然后您可以在->上使用ent

答案 1 :(得分:3)

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

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

struct dirent *ent;

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