【问题标题】:warning: assignment makes pointer from integer without a case警告:赋值从没有大小写的整数中生成指针
【发布时间】:2014-11-29 03:02:45
【问题描述】:

我需要帮助,我不知道如何解决 C 中的赋值生成指针问题

警告:赋值使指针从没有大小写的整数[默认启用]
openDir = getDirSuperBlock();
(箭头在等号处)

char* = openDir;
openDir = malloc(128);
openDir = getDirSuperBlock();

getDirSuperBlock函数就是这个

char* getDirSuperBlock()
{
    char* dir;
    dir = malloc(128);
    int i;
    get_block(4,dir);
    return dir;
}

【问题讨论】:

  • 为什么在 C++ 下无法编译时将其标记为 C++openDir = malloc(128);
  • 答案在Answer 部分。评论进入 cmets 部分。代码不是 C++,所以这就是我要问的原因。

标签: c pointers warnings


【解决方案1】:

看起来您在定义 getDirSuperBlock() 之前尝试调用它,但您没有原型。 当你这样做时,C编译器“隐式”定义它(这意味着它基本上猜测它返回什么类型以及它的参数应该是什么类型/数字) 发生这种情况时,它总是猜测您的返回类型是 int。所以你将你的函数定义为char* getDirSuperBlock(),但在你到达那部分之前,你的编译器会认为它看起来像这样:int getDirSuperBlock()。因此,您可以通过将其声明移至调用上方来解决此问题,或者在调用它之前添加一个原型,如下所示: char * getDirSuperBlock(); 或者,您可以将 int 显式转换为 char *,如下所示:openDir = (char*)getDirSuperBlock(); 但这可能不是一个好主意,因为这意味着 int 和 char* 的大小相同,这不是每个案例都有案例。

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 2015-10-19
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多