【问题标题】:Incompatible types in assignment分配中的不兼容类型
【发布时间】:2012-06-26 06:37:18
【问题描述】:

我正在用 C 编写一些代码:

int main(){
    char guess[15];
    guess = helloValidation(*guess);
    return 0;
}

而我的功能是:

char[] helloValidation(char* des) {
    do {
        printf("Type 'hello' : ");
        scanf("%s", &des);
    }while (strcmp(des, "hello") != 0);
        return des
}

但它给了我这个错误:

incompatible types in assignment 

【问题讨论】:

    标签: c


    【解决方案1】:

    您不能将其分配回guess,在您的情况下,您不必将guess传递给函数(摆脱那个 * )

    所以这个函数会改变猜测(不是它的副本)所以不需要尝试重新分配它

    helloValidation(guess);
    

    【讨论】:

    • 感谢您的帮助。实际上这里是凌晨 5 点:P 自从 4 天以来,我的脑子里一直在忙着编程
    【解决方案2】:

    guess 数组由函数本身修改。然后您尝试重新分配数组指针guess,从而导致错误。更不用说错误地尝试引用*guess 或错误地使用&des。我建议您阅读 C 指针/数组概念。

    #include <stdio.h>
    #include <string.h>
    
    char* helloValidation(char* des) {
        do {
            printf("Type 'hello' : ");
            scanf("%s", des);
        } while (strcmp(des, "hello") != 0);
        return des;
    }
    
    int main() {
        char guess[15];
        helloValidation(guess);
        return 0;
    }
    

    【讨论】:

    • 根据您的论点,任何方法都不应该是无效的。这是一个荒谬的论点。该方法不需要返回des;它只是因为 OP 最初的混乱。 strcpy 返回它的论点是无关紧要的,有点古老的标准化历史。
    • @JimBalter - 你从哪里得到任何方法都不应该是无效的想法?无论如何,我并没有试图重写 OP 的代码,只是纠正错误。 This questionanswer 有很好的例子说明返回参数非常有用(例如消除对无关临时变量的需要)。
    • “想法”是你的论点的暗示;比你从我那里得到的暗示更重要。再一次,返回 des 的 OP 是混淆的结果,因此在消除混淆时,消除返回是有意义的,这现在毫无意义。至于这个例子,称它为“优秀”是在推动它,尤其是。因为答案本身另有说明,char* s; strcpy(s = malloc(10), "test") 工作正常。随意自己进一步争论;我已经离开这里了。
    • 还有一件事:R.. 的评论最相关——众所周知,strcpy 的返回值很糟糕;它应该返回一个指向终止 NUL 的指针。
    【解决方案3】:

    scanf 语句不正确!它应该读作:

    scanf("%s", des);
    

    【讨论】:

      【解决方案4】:

      由于您将 guess 传递给 helloValidation 函数并在 scanf 中使用它,因此无需返回它并将其重新分配回 char[] 引用。

      替换

      guess = helloValidation(*guess);
      

      helloValidation(*guess);
      

      您收到错误是因为猜测引用已在堆栈上分配。你不能重写它。猜测是一个指针,您可以覆盖指针中的值,但这不会触及那里的内存。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 2013-09-15
      相关资源
      最近更新 更多