Salut,
Tu t'en es sorti avec des malloc de tous les champs de ta structure infos ?
Côté performance et consommation mémoire, c'est moche...

Tu as deux variables "ligne", une qui est un tableau d'info et l'autre qui est une ligne de fichier lu par fgets...
En C, un tableau c'est un pointeur. Mais :
int *tab; // Tu as juste un pointeur sur une zone non allouée
int tab[]; // Pareil
int tab[50]; // Un tableau de 50 int est réservé
Pour pouvoir écrire dans un tableau "int tab[]", il faut le faire pointer vers quelque chose, allouer par un malloc par exemple.
Il faut que tu es une bonne représentation dans ta tête de où sera écrit quoi.
Réfléchi à tes structures de données avant de coder.
Il ne faut pas faire des éssais au hasard jusqu'à ce que ça marche.
Donne des noms de variable en anglais. Personne ne code en français. C'est beaucoup plus pratique pour les accents.
En C les tableaux démarrent à zéro.
Pas besoin de {} pour les initialisation de chaînes.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _infos
{
char IP[20];
char heure[20];
char erreur[10];
char description[80];
}
infos;
char *sep1 = "\t";
char *sep2 = "\"";
char *sep3 = "#";
void ReadLogFile(infos *ligne, int *count)
{
char ligneFichier[100];
char *pointeur;
FILE *fichier;
fichier = fopen("test.txt", "r");
if (! fichier)
{
printf("Echec de l'ouverture du fichier\n");
return;
}
*count = 0;
while (fgets(ligneFichier, sizeof(ligneFichier), fichier) != NULL)
{
pointeur = strtok(ligneFichier, sep1);
strcpy(ligne[*count].heure, pointeur);
pointeur = strtok(NULL, sep2);
strcpy(ligne[*count].IP, pointeur);
pointeur = strtok(NULL, sep3);
strcpy(ligne[*count].erreur, pointeur);
pointeur = strtok(NULL, sep2);
strcpy(ligne[*count].description, pointeur);
(*count)++;
}
fclose(fichier);
}
void DisplayLogFile(infos *ligne, int count)
{
int i;
for (i = 0; i < count; i++)
printf("%s %s %s %s\n", ligne[i].IP, ligne[i].heure, ligne[i].erreur, ligne[i].description);
}
int main()
{
infos *ligne; /* Tableau des lignes du fichier */
int count; /* Nombre de lignes du fichier */
/* Allocation du tableau dans le tas car 500 * sizeof(infos) ça commence à faire */
ligne = (infos*)malloc(500 * sizeof(infos));
/* Lecture du fichier */
ReadLogFile(ligne, &count);
/* Affichage du tableau */
DisplayLogFile(ligne, count);
free(ligne);
return 0;
}