' - >'的无效类型参数(有' int')

时间:2015-05-04 11:33:41

标签: c pointers dereference operator-precedence invalid-argument

在编译代码时,我收到下面报告的错误。你能错误地纠正我吗?

  

->的无效类型参数(有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);

3 个答案:

答案 0 :(得分:6)

你的意思是

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

没有括号,->运算符被应用于i而不是增加的指针,这种表示法经常令人困惑,特别是因为这个

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

会做同样的事情。

您还应该检查malloc()是否未返回NULL并验证scanf()是否已成功扫描。

答案 1 :(得分:1)

你需要

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

您的原始代码与

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

因为->的优先级高于+,所以您会收到错误。

答案 2 :(得分:1)

根据operator precedence->的优先级高于+。您需要将代码更改为

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