【问题标题】:"Implicit declaration" warning“隐式声明”警告
【发布时间】:2011-02-21 10:21:00
【问题描述】:

对于此代码:

int i=0; char **mainp;
for(i=0;i<2;++i)
{
    mainp[i]=malloc(sizeof(char)*200);
    if(!scanf("%[^#],#",mainp[i]))
        break;
   if(i<2)
       scanf("%[^#],#",mainp[i]);
}

GCC 发出警告:

warning: implicit declaration of function ‘scanf’
warning: incompatible implicit declaration of built-in function ‘scanf’
warning: ‘mainp’ may be used uninitialized in this function

我在运行时遇到分段错误

输入:(P>Q),(Q>R),-R#-P 输出: (P>Q),(Q>R),-R (空槽)

我希望给我 (P>Q),(Q>R),-R -P //我应该在哪里修复我的代码,以便它给我预期 //输出

【问题讨论】:

标签: c include header segmentation-fault


【解决方案1】:

问题 1:

警告:“mainp”可能在此函数中使用未初始化

您需要先为数组数组分配内存。

char **mainp = malloc(sizeof(char*)*2);

问题 #2:

警告:函数“scanf”的隐式声明
警告:内置函数“scanf”的隐式声明不兼容

您需要在文件顶部包含stdio.h

#include <stdio.h>

问题 #3:(未包含在您的编译警告中)

记得释放分配的数组成员和数组地址。

【讨论】:

    【解决方案2】:

    gcc 要求文件开头有这一行:

    #include <stdio.h>
    

    和这样的 mainp 声明:

    char *mainp[2];
    

    【讨论】:

      【解决方案3】:

      你不应该在没有声明的情况下使用函数;您使用了scanf,但在您的代码中没有任何一点是scanf 声明的。因为它是一个标准库函数,它在标准头文件之一中声明,stdio.h,所以你只需要包含它:

      #include <stdio.h>
      

      Brian 的answer 对另一半有好处

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-16
        • 1970-01-01
        相关资源
        最近更新 更多