所以我正在开发一个小 C 程序,它是一个小地址簿,当您在其中添加新联系人时,它会自动分配内存。
我使用了两个 typedef 结构,第一个存储联系人的信息(姓名电话等):
typedef struct
{
char nom[TAILLE1];
char tel[TAILLE2];
} CONTACT;
第二个包含一个 int,其中包含地址簿中的联系人数量,另一个是指向另一个结构的指针。
typedef struct
{
int nb;
CONTACT * contacts; // tableau
} LISTE_TABLEAU;
我创建了一个从 TXT 文件中导入联系人的函数(第一行是人名,第二行是他们的电话号码,依此类推)。我只用基本的简化了它
int lireDonneesTxt(LISTE_TABLEAU* tab)
{
int i;
tab->contacts = (CONTACT *)malloc(sizeof(CONTACT)*13); (13 because there are 13 contact for testing purposes)
i = 0;
while( !feof(entree) )
{
fgets(ligne, TAILLE1, entree);
strcpy(tab->contacts[i].nom, ligne);
fgets(ligne, TAILLE1, entree);
strcpy(tab->contacts[i].tel, ligne);
i++
}
return 1;
}
当我编译我的代码时,没有任何问题,也没有任何警告。
但是当我运行我的代码时,一切都很好,直到我尝试在屏幕上打印一个名称,然后可执行文件崩溃。
我的主要功能如下所示:
int main(void)
{
LISTE_TABLEAU *tabb;
tabb->nb = 0;
lireDonneesTxt(&tabb);
printf("%s", tabb->contacts[0].nom);
return 0;
}
如果我在函数main
末尾添加相同的 printf,lireDonneesTxt
它会毫无问题地打印名称。我猜数据没有正确传递给结构。
我现在被阻止了,不知道该怎么做!