“隐含声明”警告

时间:2010-05-19 14:39:18

标签: c include header segmentation-fault

对于此代码:

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&GT; Q),(Q&GT; R), - R的#-P   输出:      (P&GT; Q),(Q&GT; R), - R的            (empt slot)

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

3 个答案:

答案 0 :(得分:11)

问题#1:

  

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

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

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

问题#2:

  

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

您需要在文件顶部添加stdio.h

#include <stdio.h>

问题#3 :(不包括在编译警告中)

请记住释放已分配的数组成员以及数组地址数组。

答案 1 :(得分:1)

gcc希望在您文件的开头添加此行:

#include <stdio.h>

和这样的mainp声明:

char *mainp[2];

答案 2 :(得分:0)

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

#include <stdio.h>

Brian的answer对另一部分有好处