我在尝试构建动态数组时遇到了这个问题,我认为realloc函数有什么问题,如果你能帮我一把,我会很感激。 我能够第一次输入名字,但是当我第二次进行时,问题就开始了
typedef struct {
char nom[30], prenom[20];
int age;
} ITEM;
void Lire(ITEM **items, int *nb_items)
{
int i = 0;
printf("* Entrer les donnees et taper . pour terminer\n\n");
for (i = 0; TRUE; i++)
{
ITEM *temp = (ITEM *) realloc(*items, ((i + 1) * sizeof(ITEM)));
if (temp == NULL)
{
free(*items);
printf("Il n'y a pas de memoire! \n");
exit (0);
}
*items = temp;
printf("> nom : ");
scanf("%s", (*items[i]).nom);
if ((*items[i]).nom[0] == '.')
break;
printf("> prenom : ");
scanf("%s", (*items[i]).prenom);
}
}
int main(int argc, char *argv[])
{
ITEM *items;
int nb_items=0;
items = (ITEM *) malloc(sizeof(ITEM));
if(items == 0)
{
printf("Il n'y a pas de memoire! \n");
exit (0);
}
Lire(&items, &nb_items);
free (items);
exit(0);
}
答案 0 :(得分:2)
您的问题在于运算符优先级:*items[i]
计算结果为items[i][0]
,您需要items[0][i]
,即:{/ p>
(*items)[i]
答案 1 :(得分:1)
数组下标访问比*
更紧密。这会导致*items[i]
被解释为*(items[i])
,例如在此声明中:
scanf("%s", (*items[i]).nom);
因此访问items
就好像它是指向ITEM
的指针数组一样。实际上它是指向ITEM
结构数组的指针,应该像这样访问:
scanf("%s", (*items)[i].nom);
答案 2 :(得分:0)
让我的生活更轻松
*items = temp;
ITEM *current = &temp[i];
printf("> nom : ");
scanf("%s", current->nom);
...etc
使代码更易于阅读并简化整个运算符优先级isuuse