尝试访问动态指针数组(C)时为SIGSEV

时间:2019-01-21 14:48:36

标签: 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;
}

2 个答案:

答案 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(...

演员完全没有必要。