C 赋值中的不兼容类型

C 赋值中的不兼容类型,c,C,我正在用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")

我正在用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 

您不能将其重新分配给guess,在您的情况下,您不必将guess传递给函数(去掉它*)

因此,函数将更改guess(而不是它的副本),因此无需尝试将其重新分配

helloValidation(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;
}
#包括
#包括
char*helloValidation(char*des){
做{
printf(“键入‘hello’:”);
scanf(“%s”,des);
}while(strcmp(des,“hello”)!=0);
返回des;
}
int main(){
字符猜测[15];
helloValidation(猜测);
返回0;
}

scanf语句不正确!应改为:

scanf("%s", des);

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

替换

guess = helloValidation(*guess);


出现错误是因为堆栈上已分配guess引用。你不能在上面写。如果猜测是一个指针,您可以在指针中写入值,但是它不会触及内存

谢谢你的帮助。事实上,这里是凌晨5点:P,我的头脑在爆炸,因为4daysI说了与Keith完全相同的事情。看看这个,快速复习一下-:)“我说了与Keith完全相同的事情”-除非“精确”一词被重新定义。根据你的论点,任何方法都不应该是无效的。这是一个荒谬的论点。此方法不需要返回des;这只是因为OP最初的混乱。strcpy返回它的参数是不相关的,有点古老的标准化历史。@JimBalter-你从哪里得到没有方法应该是无效的想法?不管怎样,我并没有试图重写OP的代码,只是纠正错误。并且有一些很好的例子,说明在哪些情况下,返回一个论点是非常有用的(比如不需要额外的临时变量);比你从我这里得到的暗示更重要。同样,返回des的OP是混乱的结果,因此在消除混乱时,消除返回是有意义的,而现在返回是毫无意义的。例如,称之为“优秀”就是在推它,特别是因为答案本身不是这样说的,而且
char*s;strcpy(s=malloc(10),“测试”)
工作正常。你自己可以自由地进一步争辩;我要离开这里。还有一件事:R.的评论。。这是最相关的——众所周知,strcpy的返回值是一个错误;它应该返回一个指向终止NUL的指针。
helloValidation(*guess);