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

それを推測に戻すことはできません。あなたの場合、推測を関数に渡しているので、そうする必要はありません(それを取り除く * )

したがって、関数は推測を変更するため(コピーではありません)、割り当てを試みる必要はありません

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

推測を helloValidation 関数に渡して scanf で使用しているため、それを返して char[] 参照に再割り当てする必要はありません。

交換

guess = helloValidation(*guess);

helloValidation(*guess);

推測参照が既にスタックに割り当てられているため、エラーが発生しています。上書きすることはできません。推測がポインターだった場合、ポインターの値を上書きできますが、そこにあるメモリには影響しません。

于 2012-06-24T23:39:12.733 に答える