Предупреждение о неявной декларации - PullRequest
3 голосов
/ 19 мая 2010

Для этого кода:

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

И я получаю ошибку сегментации во время выполнения

ввод: (Р> Q) (Q> R) - R # -P выход: (Р> Q) (Q> R) - Р (пустой слот)

я ожидал дать мне (Р> Q) (Q> R) - Р -P // где я должен исправить в своем коде так, чтобы он дал мне ожидаемый // выход

Ответы [ 3 ]

11 голосов
/ 19 мая 2010

Задача № 1:

предупреждение: «mainp» может использоваться неинициализированным в этой функции

Сначала нужно выделить память для массива массивов.

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

Задача № 2:

предупреждение: неявное объявление функции "scanf"
предупреждение: несовместимое неявное объявление встроенной функции «scanf»

Вам нужно указать stdio.h в начале вашего файла:

#include <stdio.h>

Проблема № 3: (не включена в предупреждения о компиляции)

Не забудьте освободить как выделенные члены массива, так и массив адресов массива.

1 голос
/ 19 мая 2010

gcc ожидает эту строку в начале вашего файла:

#include <stdio.h>

и объявление mainp, подобное этому:

char *mainp[2];
0 голосов
/ 19 мая 2010

Вы не должны использовать функции без их объявления; вы использовали scanf, но ни в одной точке вашего кода не объявлено scanf. Поскольку это стандартная библиотечная функция, она объявлена ​​в одном из стандартных заголовков, stdio.h, поэтому вам просто нужно включить ее:

#include <stdio.h>

ответ Брайана хорош для другой части

...