cpointersmalloccharacter-arrays

"Semantic issue: Implicitly declaring library function 'malloc' with type 'void *(unsigned long)'"


I have a block of code where I'm trying to grab an expression inside of parentheses and then use it. At the point where the below code begins, I am in the middle of iterating through a character array and pcc is the pointer to the current character, which has been determined to be a '('. My goal is to put the paranthetical expression in a character array pe.

            int nnrp = 1; /* Net number of right parantheses */
            char * pbpe = pcc; /* Pointer to the beginning paranthetical expression */
            for (++pcc; *pcc!= '\0' && nnrp != 0; ++pcc)
            {
                if (*pcc == '(')
                {
                    ++nnrp;
                }
                else if (*pcc == ')')
                {
                    --nnrp;
                }
                else if (*pcc == '\0')
                {
                    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] = '\0';

But my IDE (XCode 6.0) is giving me the warning

"Semantic issue: Implicitly declaring library function 'malloc' with type 'void *(unsigned long)'"

on the strncpy(pcc+1, pcc, nel); line. I'm wondering

  1. why I'm getting this warning.
  2. whether I need to fix it
  3. if there are any other problems you can see in my code.

Thanks in advance.


Solution

  • Try adding this line to the top of your file:

    #include <stdlib.h>
    

    This will bring in the explicit declaration of malloc, so you shouldn't get that warning.

    You are probably getting a warning because you forgot to include stdlib.h in your file. The compiler is being nice to you and giving you an implicit declaration of malloc so that the code will compile. In general, it's better to include the explicit declaration so that the compiler really knows what kind of function you are trying to call, and it's also good to fix all the warnings that you can so that your build process will be clean and you can notice the more important warnings. So yes, you should fix it.