Программа c, передавая предупреждающее сообщение, аргумент 1 из «fstat» делает целое число из указателя без приведения - PullRequest
4 голосов
/ 15 марта 2012

Я возвращаюсь в с после долгого перерыва.Вот небольшая программа, которую я написал для вывода размера файла.Он компилируется и работает правильно, и в значительной степени копируется и вставляется со страницы руководства.Но это дает мне досадное предупреждение от gcc.

gcc -ggdb  read_file_to_char_array.c -o read_file_to_char_array `mysql_config --cflags --libs && pkg-config --cflags --libs gtk+-2.0 && pkg-config --cflags --libs sdl`  
read_file_to_char_array.c: In function ‘main’:
read_file_to_char_array.c:22:19: warning:   [enabled by default]
/usr/include/i386-linux-gnu/sys/stat.h:216:12: note: expected ‘int’ but argument is of type ‘struct FILE *’`

Любые намеки на то, как я могу заставить его уйти (без отключения предупреждений;))

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char **argv) {
    unsigned long *lengths;
    FILE *fp;
    struct stat sb;

    fp = fopen("image.png", "rb");
    fstat(fp,&sb);

    printf(" Size - %lld : ", (long long)sb.st_size);

    fclose(fp);

}

1 Ответ

13 голосов
/ 15 марта 2012

Вам необходимо передать дескриптор файла , а не FILE *.

int fstat(int fildes, struct stat *buf);

Попробуйте использовать fileno(3), чтобы получить дескриптор файла от FILE *.

int fd;

fp = fopen("image.png", "rb");
fd = fileno(fp);

fstat(fd, &sb);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...