Я делаю проект, в котором мне нужно реализовать массив указателей на структуру!Структура содержит слово, его перевод и указатель на следующее!Итак, я должен создать связанный список, где указатель головы находится в одной из ячеек массивов!Я инициализирую массив в main значениями NULL!После этого мне нужно прочитать слово из файла, а затем выделить структуру, в которую я поместил слово read и его перевод, который также находится в файле.Структура файла выглядит следующим образом:
hello;bonjour
Существует функция с именем hash_string (word), которая генерирует индекс от 0 до размера массива-1.Так что для слова привет, я получаю индекс 2. Я вставляю это слово и его перевод в массив с помощью этой функции:
void remplissage_hachage (cellule_t **tabMajeur,FILE *fichier)
{
char string1[20];
cellule_t *copy;
unsigned int indice;
int boolean = 0;
char *string2, *string3;
cellule_t *c;
while(fgets(string1,100,fichier) != NULL)
{
string2 = strtok(string1,";");
string3 = strtok(NULL,";");
printf("string2: %s\n",string2);
printf("string3: %s\n",string3);
if(tabMajeur[2] != 0)
{
printf("Adresse 2 : %s\n",tabMajeur[2]->mot);
}
if(boolean != 1 && tabMajeur[2] == 0)
{
copy = tabMajeur[2];
tabMajeur[2] = creationCellule(string2,string3);
tabMajeur[2]->suivant = copy;
}
}
}
Вставка выполняется правильно, но когда я читаю другое слово, например
bye;au revoir
hash_string также дает индекс = 2, и теперь мне нужно создать связанный список, поместив это значение в заголовок связанного списка и передав привет в качестве второго элемента.Проблема в том, что без вставки массив [2] дает result = bye, а не hello, поэтому он немедленно перезаписывает слово hello.Я не понимаю, как это все возможно?
Я также помещаю структуру и основную функцию, чтобы показать вам, ребята, как я инициализирую массив:
typedef struct cell{
char *mot;
char *traduction;
struct cell *suivant;
}cellule_t;
int main()
{
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");
}
Файл выглядит так:
hello;bonjour
bye;au revoir
Огромное спасибо заранее !Я знаю, что текст длинный, но я хотел объяснить все, чтобы было понятно!