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
- why I'm getting this warning.
- whether I need to fix it
- if there are any other problems you can see in my code.
Thanks in advance.
int (long)
rather thanvoid *(unsigned long)
... Curious: Which compiler (of which version and with which options) is this? – Cachet-std=c89
and-std=c99
. This is not the traditional way of implicit function declarations (which was linked below), Clang chooses the correct declaration ofmalloc
and emits a warning (required by C99; in C89, the code is simply undefined). Interesting. – Cachet