Я получаю ошибку «int format, different type arg (arg 4)» на последней строке. Должен ли я просто использовать int или есть лучший способ справиться с этим?Cast off_t to int
struct stat info;
if (stat(file_path, &info) == -1 || errno == ENOENT)
return -1;
if (stat(file_path, &info) != -1)
{
char buf[LINELEN];
snprintf(buf,LINELEN,"File Size: %d",info.st_size);
Плохая вещь о 'printf' (и это делает меня действительно грустным) именно эта проблема с строкой формата. Представьте свой код, который typedefs типа либо 'uint32_t', либо' uint64_t' в зависимости от некоторой конфигурации. Вы никогда не можете просто распечатать эти переменные. Однако решение, которое наиболее определенно всегда работает без проблем, состоит в том, чтобы отнести аргументы к максимальному размеру, который они могут принять. Например, в вашем случае: 'printf ("% lu ", (unsigned int) info.st_size);' который печатает правильно независимо от размера. Проблема только в том, что аргумент больше, чем ваш бросок. Вы потеряете данные, но все равно избегаете UB. – Shahbaz