@Rivares1853

Как понять что находится в entry->d_name в struct dirent?

Получение списка файлов находящихся в папке на С++(с пом. библ. dirent.h).
Название файлов читается правильно, но записывается в массив какая-то чушь..
Помогите разобраться.
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <ctype.h>


int main(void)
{   
    short i = 0; char num; char mass[50] = {};
    DIR *dir = opendir("/home/rivares1853/Desktop/34/21");
    if(dir)
    {
        struct dirent *entry;
        while((entry = readdir(dir)) != NULL)
        {
            if( *(entry->d_name) == ' . ' )
            {
               continue;
            }
            else
            {
               mass[i++] = *(entry->d_name);
               printf("%s\n", entry->d_name);
            }
        }
    }
    else
    {
        fprintf(stderr, "Error opening directory\n");
    }
closedir(dir);

printf("-----------------------\n");
    short j = i;
    for( i = 0; i < j; ++i)
    {
        printf("%s\n", &mass[i]);
    }

    return 0;
}


Вот результаты:
97cce9a07ae841eb8e84c99a50c4f9d5.jpg
  • Вопрос задан
  • 934 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
char mass[50]

mass -- это массив из 50 символов, а не из 50 строк.
mass[i++] = *(entry->d_name);

на место i-го символа скопировал первый символ имени файла, а не всё имя целиком.
for( i = 0; i < j; ++i)
{
printf("%s\n", &mass[i]);
}

Распечатал строки, начинающиесяя с 0-го, 1-го, 2-го, ... символа накопленного в mass.

Похоже, что кто-то хотел написать на C++, но вместо std::string использовал char.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@sitev_ru
sitev.ru - мой блог ...
Нет записи в массив mass[]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы