c 程序,警告消息传递 ‘fstat’ 的参数 1 从指针生成整数而不进行强制转换

标签 c pointers casting warnings stat

经过长时间的中断后,我又回到了 c 语言。这是我编写的一个小程序,用于输出文件大小。它可以编译,并且可以正常工作,并且几乎是从手册页中复制和粘贴的。但它给了我一个来自 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);

}

最佳答案

您需要pass a file descriptor ,而不是 FILE *

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

尝试使用 fileno(3)FILE * 中获取文件描述符。

int fd;

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

fstat(fd, &sb);

关于c 程序,警告消息传递 ‘fstat’ 的参数 1 从指针生成整数而不进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9709730/

相关文章:

c - 获取两个日期之间的天数差异?

c - 访问我使用同一应用程序创建的文件时,Linux 中的权限被拒绝

java - 从 native pthread 调用 Java 方法时出现 SIGSEGV

c++ - 更改 const char 指针的问题

python - Cython 无法将负值转换为 unsigned long

c - 使用 C 中的 allegro 库制作射弹射击

c++ - 为什么我可以有一个 std::vector<std::ofstream*> 但不能有一个 std::vector<std::ofstream> ?

有人可以解释一下以下代码中如何将内存分配给双指针吗

c# - 无法在 C#.NET 中将字符串转换为 GUID

java - 在 Java 中的 lambda 表达式中类型转换?