Как понять что находится в entry->d_name в struct dirent?
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.
Нет записи в массив mass[]