Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 获取错误“;赋值从整数生成指针,不带强制转换;_C_Pointers_Compiler Errors - Fatal编程技术网

C 获取错误“;赋值从整数生成指针,不带强制转换;

C 获取错误“;赋值从整数生成指针,不带强制转换;,c,pointers,compiler-errors,C,Pointers,Compiler Errors,嘿,我是C新手,代码有问题 当我运行这部分代码时,我得到一个错误: Cmd* GetCommand() { Cmd* command; char* cmdStr = getIn(); command = parseL(cmdStr); return command; } Cmd** parseL(char* str){ Cmd** command; char*

嘿,我是C新手,代码有问题

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

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;
    }
对于这一行:

assignment makes pointer from integer without a cast.

命令
来自类型
Cmd*
,而且函数
parseL
返回
Cmd*
,因此我无法找出问题所在。

编译器看到的那一刻

             command = parseL(cmdStr);
它还不知道
parseL()
返回的是哪种类型,因为后面的代码中定义了它

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

由于
命令
被定义为指针,编译器将阻塞并发出警告:

回避这个问题

  • 或者定义整个函数
  • 或者至少提供该功能的原型

    error assignment makes pointer from integer without a cast
    
在使用它之前


作为旁注:


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

声明的顺序在C中很重要。在使用函数之前定义它们。您忘记了包含错误的行号!当然,一个聪明的人可能会发现它,但最好包括整个错误。它会给你一个行号。顺便说一句,如果你需要互相调用函数,你不能先定义一个再定义另一个,所以你需要拆分函数声明和定义()。我不认为你是这样,但是把所有的声明放在上面会使定义顺序变得不重要。你忽略了另一个警告。永远不要忽略警告无论你做什么,都不要添加强制转换来抑制(措辞糟糕的)警告。事实上,当前标准、以前的标准和之前的标准都不会假定
int
;他们说“错误”。许多编译器仍然允许使用“default
int
”,但除了最初的C90(C89)标准之外,其他任何标准都不允许这样做。所有其他版本都要求在调用函数之前知道类型。你不一定要有一个完整的原型;在调用每个函数之前,必须对其进行声明(或定义)。@JonathanLeffler:感谢您的关注…:}
error assignment makes pointer from integer without a cast
Cmd** parseL(char*);