我正在用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
答案 0 :(得分: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;
}
答案 1 :(得分:3)
scanf
声明不正确!它应该是:
scanf("%s", des);
答案 2 :(得分:1)
你无法将它分配给猜测,在你的情况下,你没有必要,因为你正在猜测函数(摆脱*)
因此该函数将改变猜测(不是它的副本)所以不需要尝试将其分配回来
helloValidation(guess);
答案 3 :(得分:-1)
因为您将猜测传递给helloValidation函数并在scanf中使用它,所以无需返回它并将其重新分配给char []引用。
替换
guess = helloValidation(*guess);
与
helloValidation(*guess);
您收到错误是因为猜测参考已经在堆栈上分配。你不能写它。如果猜测是一个指针,你可以在指针上写入值,但是它不会触及那里的内存。