在编译代码时,我收到下面报告的错误。你能错误地纠正我吗?
->
的无效类型参数(有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);
答案 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);