c - "Semantic issue: Implicitly declaring library function ' malloc ' with type ' void *(无符号长)'"

标签 c pointers malloc character-arrays

我有一段代码,我试图在括号内获取一个表达式,然后使用它。在下面代码开始的地方,我正在遍历一个字符数组,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); 行。我想知道

  1. 为什么我会收到此警告。
  2. 我是否需要修复它
  3. 如果您可以在我的代码中看到任何其他问题。

提前致谢。

最佳答案

尝试将这一行添加到文件的顶部:

#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/

相关文章:

c - 如何打印出一个char指针指向的字符串?

c - 创建数组 "normally"和使用 malloc 之间的区别

c - 正确的选择是什么?我引用的源代码中提到了它的C。但我觉得它是

C - 使用 stat() 获取字节时遇到问题

c++ - 指向给定内存地址的指针-C++

通过 ssh 调用 write()

c - 指向多维数组的指针

c++ - 如何在C++中使用new分配内存字节数

c++ - 使用 Gloox C/C++ 的 XMPP 握手流程

C - 区分字符和数字,然后进行相应处理