【问题标题】:warning: fopen() call [duplicate]警告:fopen() 调用 [重复]
【发布时间】:2011-08-08 10:22:17
【问题描述】:

您好,我正在使用 linux 下的 stdlib 进行编程。

gcc 对以下代码行发出以下警告,知道这是为什么吗?

FILE *fd;
if ( fd = fopen( filename, "rw" )== NULL )
{

警告是:

warning: assignment makes pointer from integer without a cast.

这是如何发生的,根据 stdlib 文档,fopen 的返回类型是 FILE*。那么为什么仍然存在警告?有什么想法吗?

--提前致谢--

【问题讨论】:

    标签: c warnings fopen std


    【解决方案1】:

    试试

    if ((fd = fopen( filename, "rw")) == NULL)
        ^                           ^ 
    

    否则fd 将取值 0 或 1,而 fopen 返回的 FILE * 本身将丢失。因此,如果没有这些括号,比较的结果将存储在 fd 而不是 FILE * 本身。

    【讨论】:

    • 值得注意的是 == 的优先级高于 =。这是先执行的方式。
    • @taskinoor 感谢您的澄清。
    【解决方案2】:

    您实际上是将fd 分配为fopen(filename, "rw") == NULL,因为条件表达式是一个整数(0 或1),您是从一个整数中分配一个指针。按照@cnicutar 的答案进行修复

    【讨论】:

      【解决方案3】:
      FILE *fd;
      if ( (fd = fopen( filename, "rw" ))== NULL )
      {
      

      只需复制此代码即可使用.... 你只是忘了把 () 放在 "fd = fopen( filename, "rw" )"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-04
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        • 2018-03-27
        • 2018-03-31
        相关资源
        最近更新 更多