为什么双指针不修改表?

时间:2019-06-06 01:07:58

标签: c++ c

我有一个问题。

这是我的结构:

typedef struct cell{

    char *mot;
    char *traduction;
    struct cell *suivant;


}cellule_t;

这是我调用函数remplissage_hachage

的主要功能
int main()
{
    char *buffer = "hello";    
    cellule_t **tabMajeur;
    tabMajeur = malloc(HASH_MAX * sizeof(cellule_t *));
    memset(tabMajeur,0 ,HASH_MAX);
    FILE * file = fopen("fichier.txt","r");
    remplissage_hachage(tabMajeur,"fichier.txt");

}

函数remplissage_hachage以tabMajeur作为参数:

void remplissage_hachage (cellule_t **tabMajeur,char *nomFichier)
{
    char  string1[20];
    cellule_t *copy;
    unsigned int indice;
    int boolean = 0;
    char *string2, *string3;
    cellule_t *c;


    FILE *fichier= fopen(nomFichier,"r");

    while(fgets(string1,100,fichier) != NULL)
    {
        string2 = strtok(string1,";");
        string3 = strtok(NULL,";"); 
        printf("string2 %s\n",string2);
        printf("string3 %s\n",string3);

        int indice = recherche(tabMajeur,string2,&boolean,c);

        if(boolean != 1) 
        {
            copy = tabMajeur[indice];
            tabMajeur[indice] = creationCellule(string2,string3);
            tabMajeur[indice]->suivant = copy;    
        }


    }

}

问题在于,在main中调用remplissage_hachage之后,即使我将其作为指针传递,tabMajeur也不会被修改。  你能告诉我为什么吗?

1 个答案:

答案 0 :(得分:1)

您是否在调用recherche()之后检查了boolean!= 1? 同样,您也不必要两次打开文件,一次是在main()中,一次是在remplissage_hachage()中。

如果'boolean'具有正确的值,则另一个可能的失败点是while条件,如果文件为空,它将失败。