【发布时间】:2015-04-24 08:14:17
【问题描述】:
我有一段代码,我试图在括号内抓取一个表达式,然后使用它。在下面的代码开始处,我正在遍历一个字符数组,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) 给了我警告
“语义问题:隐式声明库函数 'malloc' 类型为 'void *(unsigned long)'”
在strncpy(pcc+1, pcc, nel); 线上。我想知道
- 为什么我会收到此警告。
- 我是否需要修复它
- 如果您在我的代码中可以看到任何其他问题。
提前致谢。
【问题讨论】:
-
我希望隐式声明的类型为
int (long)而不是void *(unsigned long)... 好奇:这是哪个编译器(哪个版本和哪个选项)? -
Clang 给出了这个警告,
-std=c89和-std=c99。这不是隐式函数声明的传统方式(链接如下),Clang 选择了malloc的 正确 声明并发出警告(C99 要求;在 C89 中,代码只是未定义)。有趣。
标签: c pointers malloc character-arrays