警告:指针和整数之间的比较,传递'read'的参数1使得没有强制转换的指针产生整数

时间:2014-08-19 06:14:22

标签: c++ c pointers

编译名为Online_ana.c的程序(通过运行makefile)时,包含以下行:

******#define FIFO1 (getenv("fifo1"))******
FILE *fifoFile;

54 : if ((fifoFile = fopen((FIFO1!=NULL) ? FIFO1 : "fifo1", O_RDONLY)) == -1)

153 : if ((read(fifoFile, &BufferHeader, sizeof(struct event_header))) != sizeof(struct event_header))

168 : if ((read(fifoFile, &MyBuffer[cnt], 4*BufferHeader.n_sca)) != 4*BufferHeader.n_sca)

189 : if ((read(fifoFile, &MyBuffer[cnt], 2*(BufferHeader.n_adc+BufferHeader.n_tdc+BufferHeader.n_pcos))) != 2*(BufferHeader.n_adc+BufferHeader.n_tdc+BufferHeader.n_pcos))


I encountered such warnings:

Online_ana.c:**54**:69: warning: comparison between pointer and integer [enabled by default]
Online_ana.c: In function ‘GetBufferFromFifo’:
Online_ana.c:**153**:52: warning: passing argument 1 of ‘read’ makes integer from pointer without a cast [enabled by default]
/usr/include/unistd.h:361:16: note: expected ‘int’ but argument is of type ‘struct FILE *’
Online_ana.c:**168**:7: warning: passing argument 1 of ‘read’ makes integer from pointer without a cast [enabled by default]
/usr/include/unistd.h:361:16: note: expected ‘int’ but argument is of type ‘struct FILE *’
Online_ana.c:**189**:7: warning: passing argument 1 of ‘read’ makes integer from pointer without a cast [enabled by default]
/usr/include/unistd.h:361:16: note: expected ‘int’ but argument is of type ‘struct FILE *’

有什么问题?希望可以有人帮帮我。在此先感谢!!

3 个答案:

答案 0 :(得分:3)

大多数情况下,警告是因为您将FILE*(指针)传递给需要整数参数的函数。对于fopen的警告,因为将指针(FILE*)与整数(-1)进行比较。

换句话说,您正在混合两个不同的I / O系统。

要么使用POSIX功能,例如openread,要么使用C函数fopenfread。不要混。

答案 1 :(得分:2)

您的代码全部编写,就好像您使用的是UNIX文件描述符,而不是标准的I / O文件句柄。如果您想这样做,请将fopen()更改为open(),并将fifoFile的声明从FILE *更改为int

答案 2 :(得分:0)

您正在使用fopen()打开一个标准库函数的文件,这将为您提供与该流关联的文件指针。 另一方面,您使用的是read(),它是一个系统调用,它将文件描述符作为第一个输入,即整数。

重要的是 - 流的模式必须与文件描述符的模式兼容。

虽然,也可以使用stdio.h中的int fileno(FILE * stream)将FILE *转换为文件描述符(fd)