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
Thanks in advance.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With