开发者

"Implicit declaration" warning

For this code:

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("%[^#],#",m开发者_开发技巧ainp[i]);
}

GCC emits the warnings:

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

And I get a segmentation fault at runtime

input:(P>Q),(Q>R),-R#-P output: (P>Q),(Q>R),-R (empt slot)

i expected to give me (P>Q),(Q>R),-R -P //where should i fix in my code such that it gives me expected //output


Problem #1:

warning: ‘mainp’ may be used uninitialized in this function

You need to allocate memory for the array of arrays first.

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

Problem #2:

warning: implicit declaration of function ‘scanf’
warning: incompatible implicit declaration of built-in function ‘scanf’

You need to include stdio.h at the top of your file:

#include <stdio.h>

Problem #3: (Not included in your compiling warnings)

Remember to free both the allocated array members and also the array of array address.


gcc expects this line at the beginning of your file:

#include <stdio.h>

and a declaration of mainp like this one:

char *mainp[2];


You shouldn't use functions without declaring them; you used scanf, but at no point in your code is scanf declared. Since it's a standard library function it's declared in one of the standard headers, stdio.h, so you just need to include it:

#include <stdio.h>

Brian's answer is good for the other part

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜