得到错误“赋值使指针从整数开始而没有强制转换”

时间:2018-09-28 00:17:20

标签: c pointers compiler-errors

Cmd* GetCommand() {
            Cmd* command;
            char* cmdStr = getIn();
            command = parseL(cmdStr);
            return command;
   }

Cmd** parseL(char* str){
        Cmd** command;
        char* token;
        char str2[CMD_MAX_LINE_LENGTH];
        strcpy(str2, str);
        token = strtok(str2, DELI);
        command = ParC(token);
        return command;
}

Cmd* parC(char* cmdStr) {
    Cmd* command = calloc(1, sizeof(CmdCommand));
        if (cmdStr == NULL) {
            command->cmd = INVALID;
            return command;
        }
        else
            parse2C(cmdStr, command);
        return command;
    }

嘿,我是C语言的新手,我的代码有问题。

当我运行这部分代码时,我得到一个错误:

assignment makes pointer from integer without a cast.

此行:

             command = parseL(cmdStr);

command来自类型Cmd*,并且函数parseL返回Cmd*,所以我找不到问题所在。

1 个答案:

答案 0 :(得分:1)

编译器看到

 command = parseL(cmdStr);

它尚不知道parseL()返回哪种类型,因为它将在代码的后面定义。

对于这种情况, C标准定义为,许多编译器都将int假定为返回类型。

由于command被定义为指针,因此编译器阻塞并发出观察到的警告:

error assignment makes pointer from integer without a cast

要解决此问题

  • 要么定义整个函数
  • 至少提供函数的原型

    Cmd** parseL(char*);
    

之前 被使用。


作为旁注:

您将遇到下一个错误,因为Cmd**Cmd*不同。