4

いくつかの問題を解決するのを手伝ってください。

ファイルには次が含まれます。

AAAA 111 BBB
CCC 2222 DDDD
EEEEE 33 FF

コードは次のとおりです。

int main() {
    FILE * finput;

    int i, b;
    char a[10];
    char c[10];

    finput = fopen("input.txt", "r");

    for (i = 0; i < 3; i++) {
        fscanf(finput, "%s %i %s\n", &a, &b, &c);
        printf("%s %i %s\n", a, b, c);
    }

    fclose(finput);
    return 0;
}

コードは機能します。ただし、次のエラーが発生します。

format «%s» expects argument of type «char *», but argument 3 has type «char (*)[10]
format «%s» expects argument of type «char *», but argument 5 has type «char (*)[10]

種類が間違っていませんか?どうしたの?

4

1 に答える 1

9

配列名は最初の要素へのポインターに減衰するため、配列のアドレスを に渡すにはfscanf()、配列を直接渡すだけです。

fscanf(finput, "%s %i %s\n", a, &b, c);

これは次と同等です。

fscanf(finput, "%s %i %s\n", &a[0], &b, &c[0]);

しかし、明らかにa代わりに使用する&a[0]方が便利です。

あなたが書いた方法では、同じを渡しています(それが機能する理由です)が、その値は異なるを持っています:それはcharもうaへのポインタではなく、sの配列へのポインタcharです。これfscanf()は予期されていることではないため、コンパイラはそれについて警告します。

説明については、https ://stackoverflow.com/a/2528328/856199 を参照してください。

于 2012-10-24T04:30:22.447 に答える