1

コードをコンパイルしているときに、以下に報告されたエラーが表示されます。私が間違っていたところを訂正していただけますか?

->(have int)の無効な型引数

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

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

typedef struct bundles
    {
    char str[12];
    struct bundles *right;
}bundle;

int main() {

    /* Enter your code here. Read input from STDIN. Print output to STDOUT */    
    unsigned long N;
    scanf("%lu", &N);
    bundle *arr_nodes;
    arr_nodes = malloc(sizeof(bundle)*100);
    int i=5;
    for(i=0;i<100;i++)
    {
    scanf("%s", &arr_nodes+i->str);
    printf("%s", arr_nodes+i->str);
    }
    return 0;
}

これらの行で問題に直面しています:

scanf("%s", &arr_nodes+i->str);
printf("%s", arr_nodes+i->str);
4

3 に答える 3

6

もしかして

scanf("%s", (arr_nodes+i)->str);

->増加したポインターの代わりに演算子が適用されていた括弧なしiでは、その表記法はしばしば混乱を招きます。

scanf("%s", arr_nodes[i].str);

まったく同じことをします。

また、malloc()返されなかったことNULLを確認し、正常にscanf()スキャンされたことを確認する必要があります。

于 2015-05-04T11:35:42.220 に答える
1

あなたが必要

scanf("%s", (arr_nodes+i)->str);
printf("%s", (arr_nodes+i)->str);

元のコードは次と同じでした

scanf("%s", &arr_nodes+ (i->str) );

->は よりも優先順位が高いため、+そのエラーが発生します。

于 2015-05-04T11:36:50.327 に答える
1

演算子の優先順位によると、->は よりも優先され+ます。コードを次のように変更する必要があります

scanf("%s", (arr_nodes+i)->str);
于 2015-05-04T11:37:51.813 に答える