После долгого времени поиска решения я должен попросить вашу драгоценную помощь. Я работаю над программой, которая реализует команду «ls» unix в C. У меня будет только имя файла и его размер. Я посмотрел, что я должен использовать: «stat» и «dirent». Я нашел «решение» в Stackoverflow, но не работал отлично для меня. Таким образом, я могу показать имена файлов в каталоге, но не их размер. Когда я использую GCC, показывает ли: 0 октет (пока оно не пусто) или "Команда Unix «ls» в C
error: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘__off_t’ [-Werror=format=] printf("%s - %s", dp->d_name, s->st_size);
"
Мой тестовый код (не чистить):
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <fcntl.h>
#include <errno.h>
#include <poll.h>
struct stat statbuf;
struct dirent *dp;
struct stat *s;
int main()
{
DIR *dirp;
dirp = opendir("/tmp/gestrep");
while((dp = readdir(dirp)) !=NULL)
{
stat(dp->d_name, &statbuf);
printf("%s - %s", dp->d_name, s->st_size);
}
}
В факт, я не знаю, как решить проблему с типом формата. Я видел, что могу использовать ftell/fseek, но я не имею права использовать функции FILE *.
Спасибо за все решения :)
возможно дубликат [Использовать Printf для отображения выкл \ _t, nlink \ _t, размер \ _t и другие] (http: // sta ckoverflow.com/questions/1401526/use-printf-to-display-off-t-nlink-t-size-t-and-others) – Kevin
Не передаете ли вы st_size (целочисленный тип) в% s (null- terminated char string)? – tipaye
Первым шагом в отладке является чтение и понимание ошибки. GCC сообщает вам, что именно и где проблема. – Kevin