繁体   English   中英

“隐含声明”警告

[英]“Implicit declaration” warning

对于此代码:

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]);
}

海湾合作委员会发出警告:

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 //我应该在我的代码中修复哪些它给我预期的//输出

问题#1:

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

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

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

问题#2:

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

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

#include <stdio.h>

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

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

gcc期望你的文件开头的这一行:

#include <stdio.h>

以及像这样的mainp声明:

char *mainp[2];

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

#include <stdio.h>

布莱恩的答案对其他部分有好处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM