scanf尝试访问titolo [i]-> nome时出现错误,我不明白为什么
typedef struct tit *TITOLO;
struct tit {
char nome[20];
};
int main()
{
TITOLO *titolo;
titolo =(TITOLO *) malloc(4*sizeof (TITOLO));
if (titolo == NULL) exit(1);
int i;
for (i=0;i<4;i++) {
printf("Insert title: ");
scanf("%s", titolo[i]->nome);
}
return 0;
}
答案 0 :(得分:6)
typedef struct tit *TITOLO;
将TITOLO定义为指针类型,而不是结构类型。摆脱这种情况并改用typedef结构:
typedef struct {
char nome[20];
} TITOLO;
TITOLO* titolo = malloc(4*sizeof(*titolo));
答案 1 :(得分:1)
您可能想要这样:
typedef struct tit *TITOLO;
struct tit {
char nome[20];
};
int main()
{
TITOLO titolo;
titolo = (TITOLO)malloc(4 * sizeof(struct tit));
if (titolo == NULL) exit(1);
int i;
for (i = 0; i < 4; i++) {
printf("Insert title: ");
scanf("%s", titolo[i].nome);
}
return 0;
}
TITOLO
已经是指针类型。
但是最好的做法是按照Lundin的回答和多加推荐的注释来建议:不要将指针类型隐藏在typedef后面,只会增加混乱。
顺便说一句:
... = (TITOLO)malloc(...
可以写为:
... = malloc(...
演员完全没有必要。