我有一段代码,我试图在括号内获取一个表达式,然后使用它。在下面代码开始的地方,我正在遍历一个字符数组,pcc
是指向当前字符的指针,它已被确定为 '('
。我的目标是将附加表达式放在字符数组 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';
但是我的 IDE (XCode 6.0) 给我警告
“语义问题:隐式声明类型为‘void *(unsigned long)’的库函数‘malloc’”
在 strncpy(pcc+1, pcc, nel);
行。我想知道
- 为什么我会收到此警告。
- 我是否需要修复它
- 如果您可以在我的代码中看到任何其他问题。
提前致谢。
最佳答案
尝试将这一行添加到文件的顶部:
#include <stdlib.h>
这将引入 malloc
的显式声明,因此您不应收到该警告。
您收到警告可能是因为您忘记在文件中包含 stdlib.h。编译器对您很好,并为您提供了 malloc
的隐式声明,以便代码可以编译。通常,最好包含显式声明,这样编译器才能真正知道您要调用的函数类型,并且修复所有可能的警告也很好,这样您的构建过程就会很干净,您可以注意到更重要的警告。所以是的,你应该修复它。
关于c - "Semantic issue: Implicitly declaring library function ' malloc ' with type ' void *(无符号长)'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666441/