Что не так с этим заголовочным файлом?

Я довольно новичок в C и начинаю изучать заголовочные файлы. При использовании моего заголовка я получаю сообщение об ошибке invalid type argument of '->' (have struct dirent), Я не понимаю, что это значит, я прочитал здесь, что второй аргумент -> должен быть указатель, поэтому я попытался добавить * к нему (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 ответа

Решение

Я прочитал здесь, что второй аргумент -> должен быть указателем,

Это неправильно, "первый" аргумент, или, на самом деле, операнд -> оператор должен иметь тип указателя.

В твоем случае, ent не является типом указателя, поэтому вы не можете использовать оператор разыменования члена указателя ->, (вы могли бы использовать оператор разыменования члена . вместо).

На самом деле, в вашем коде, ent должен быть указателем, в соответствии с типом возвращаемого значения readdir(), Так что лучше исправь тип ent быть из struct dirent * тогда вы можете использовать -> на ent,

Обычно заголовочные файлы содержат только определения данных и прототипы функций. Ваше определение функции почти наверняка должно быть в файле C.

Если вы посмотрите на функцию readdir он возвращает указатель на struct dirent поэтому ваша переменная ent должна быть указателем struct dirent *readdir(DIR *dirp);

struct dirent *ent;

Это исправит вашу ошибку invalid type argument of '->' (have struct dirent)

Другие вопросы по тегам