"Семантическая проблема: неявное объявление библиотечной функции 'malloc' с типом ' void *(unsigned long)'"
у меня есть блок кода, где я пытаюсь схватить выражение внутри скобок, а затем использовать его. В точке, где начинается приведенный ниже код, я нахожусь в середине итерации через массив символов и pcc
- это указатель на текущий символ, который был определен '('
. Моя цель состоит в том, чтобы поместить выражение в скобках обозначены слова в массив символов pe
.
int nnrp = 1; /* Net number of right parantheses */
char * pbpe = pcc; /* Pointer to the beginning paranthetical expression */
for (++pcc; *pcc!= '' && nnrp != 0; ++pcc)
{
if (*pcc == '(')
{
++nnrp;
}
else if (*pcc == ')')
{
--nnrp;
}
else if (*pcc == '')
{
sprintf(err, "Unbalanced paranthesis");
return -1;
}
}
/* If we're here, *pcc is the closing paranathesis of *pbpe */
long nel = pcc - pbpe; /* New expression length */
if (nel == 1)
{
sprintf(err, "Empty parenthesis");
return -1;
}
char * pe = (char*)malloc(nel+1); /* Paranthetical expression */
strncpy(pcc+1, pcc, nel);
pe[nel] = '';
но моя IDE (XCode 6.0) дает мне предупреждение
"семантическая проблема: неявное объявление библиотечной функции 'malloc' с типом ' void *(без знака long)'"
на strncpy(pcc+1, pcc, nel);
линии. Мне интересно
- почему я получаю это предупреждение.
- нужно ли мне это исправить
- если есть какие-либо другие проблемы, вы можете видеть в моем коде.
спасибо заранее.
1 ответов
попробуйте добавить эту строку в верхней части файла:
#include <stdlib.h>
это приведет к явному объявлению malloc
, поэтому вы не должны получать это предупреждение.
вы, вероятно, получаете предупреждение, потому что забыли включить stdlib.h в вашем файле. Компилятор любезен с вами и дает вам неявное объявление malloc
Так что код будет компилироваться. В общем, лучше включить явное объявление, чтобы компилятор действительно знал, что вид функции, которую вы пытаетесь вызвать, и также хорошо исправить все предупреждения, которые вы можете, чтобы ваш процесс сборки был чистым, и вы можете заметить более важные предупреждения. Так что да, вы должны это исправить.