Почему бы просто не добавить пробел после каждого вывода самостоятельно? Очень просто, если вы объедините все маленькие вызовы printf
в один вызов, который печатает все:
printf("%hu %d %s %s %lld %s %s\n",
sfile.st_mode, sfile.st_nlink, pwd->pw_name, grp->gr_name, sfile.st_size, MY_TIME, sd->d_name);
Если вы хотите указывать определенную ширину каждого столбца, используйте спецификатор ширины поля *Формат 1006 *, например
printf("%-4hu %-5d %10s %10s %lld %10s %s\n",
sfile.st_mode, sfile.st_nlink, pwd->pw_name, grp->gr_name, sfile.st_size, MY_TIME, sd->d_name);
[Обратите внимание, что приведенные выше значения ширины поля составляют всего примеры , экспериментируйте, чтобы получить желаемую ширину]
И наконец, обратите внимание, что вы никогда не сможете получить столбцы для выравнивания в 100% случаев, рано или поздно вы получите некоторые данные, которые слишком длинны, чтобы соответствовать ширине, которую вы определили. Лучшее решение - проверить, насколько оно распространено, и, если оно распространено, отрегулировать ширину, но в остальном действительно не нужно беспокоиться.