2

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

4 回答 4

8

数组由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;
}
于 2012-06-24T23:38:29.103 回答
3

说法scanf不正确!它应该读作:

scanf("%s", des);
于 2012-06-24T23:38:52.430 回答
1

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

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

helloValidation(guess);
于 2012-06-24T23:36:53.317 回答
-1

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

代替

guess = helloValidation(*guess);

helloValidation(*guess);

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

于 2012-06-24T23:39:12.733 回答