Проблема с S_ISDIR () приводит к C (возможно, потому что stat () не устанавливает свою структуру должным образом?)

Я хочу, чтобы моя программа взяла каталог, затем распечатала содержимое этого каталога и указала, является ли каждый элемент каталогом или нет. Если я дам ему каталог, содержащий файлы F1.txt и F2.txt и папки D1, D2 и D3, он должен вывести:

F1.txt не является каталогом
F2.txt не является каталогом
D1 это каталог
D2 это каталог
D3 это каталог

char* curr[100];
DIR* dirp = opendir(name);
struct dirent* x;
struct stat fstat;

//go to each file til readdir gives NULL
while((x = readdir(dirp)) != NULL) {

  //store name of file
  curr[0] = (x -> d_name);

  //ignore files starting with "."
  if(*curr[0] == '.')
    continue;

  //set status
  stat(curr[0], &fstat);

  //print file name
  printf("%s", *curr);

  //check if it's a directory and print result
  if(S_ISDIR(fstat.st_mode))
    printf(" is directory\n");
  else
    printf(" is not directory\n");
}

Это печатает, говоря, что все файлы не являются каталогами. Если я удаляю часть, которая игнорирует файлы, начинающиеся с ".", Он говорит, что F1.txt, F2.txt и D1 не являются каталогами, а что., D2, D3 и .. являются каталогами (в этом порядке). Это заставляет меня думать, что проблема заключается в статистическом вызове, а не в том, что я использую макросы, но я здесь запутался, поэтому не знаю.

Ответы на вопрос(1)

Ваш ответ на вопрос