[英]SIGSEV when trying to access dynamic array of pointers (C)
當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;
}
typedef struct tit *TITOLO;
將TITOLO定義為指針類型,而不是結構類型。 擺脫這種情況,而改用typedef結構:
typedef struct {
char nome[20];
} TITOLO;
TITOLO* titolo = malloc(4*sizeof(*titolo));
您可能想要這樣:
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(...
演員完全沒有必要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.