macbang
Messages postés14Date d'inscriptionjeudi 25 juin 2009StatutMembreDernière intervention 3 juillet 2009
-
30 juin 2009 à 11:48
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
1 juil. 2009 à 11:31
Bonjour, je reviens vers vous pour un problème que j'ai du mal a résoudre.
Mon programme ouvre un fichier, le but étant de découper ligne par ligne pour placer des infos dans une structure.
voici une ligne type :
18:02:05 adresseIP "01234#description"
je veux récupérer les infos de l'heure, l'adresse IP, l'ID de l'erreur puis sa description.
Lors de la première itération, tout ce passe très bien.
A la seconde itération, la variable ligne prend bien la seconde ligne du fichier texte, mais une erreur se produit lors de la copie de pointeur dans ligne[2].heure.
macbang
Messages postés14Date d'inscriptionjeudi 25 juin 2009StatutMembreDernière intervention 3 juillet 2009 30 juin 2009 à 12:01
Petite rectification :
cette algorithme fonctionne, MAIS ceci est une fonction de mon programme.
La structure est une variable globale , pour pouvoir la récupérer ensuite, je suis obligé de la passé en pointeur.
je la déclare dans le main :
infos *lignes[500];
prototype de ma fonction :
int decoupage (infos *lignes[]);
j'appel ma fonction dans le main comme ceci.
k = decoupage(&lignes)
je remplace les " . " par des " -> " dans ma fonction
( ligne[i]->IP = pointeur; )
Et le problème survient alors après la première itération ...
Sans ce problème de récupération de tableau avec un pointeur, l'algorithme fonctionne...
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 1 juil. 2009 à 11:31
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.
<hr size="2" width="100%" />#include <stdio.h>
#include <string.h>
#include <stdlib.h>