Les Allergies
Alimentaires
Posez votre question Signaler

[C] Segmentation fault lecture fichier [Résolu]

lefoufighter 281Messages postés 20 novembre 2006Date d'inscription - Dernière réponse le 29 mars 2007 à 14:46
Bonjour à tous,
je devrais ouvrir un fichier et s'il commence par "drawing" récuperer tous les champs qui suivent; mais pour le moment j'ai un "segmentation fault" si quelqu'un pouvait m'aider :
int main(int argc, char *argv[])
{	
	
	int i;
	const int TAILLE_MAX = 500;
	char ligne[TAILLE_MAX];
	char *tokens[100];
    	FILE* fichier = NULL;
/* ouverture du fichier en lecture seule */
    	fichier = fopen("usd200607.DAT","r");	
	if (fichier != NULL)
    	{
		while (fgets(ligne, TAILLE_MAX-1, fichier) != NULL)
		{	
			i = 0;
			tokens[i] = strtok(ligne,"|");
			while (tokens[i] != NULL)
			{
				tokens[++i] = strtok(ligne," ");
			}
			if(strcmp(tokens[0],"Drawing"))
				printf("%s\n",tokens[1]);
			fgets(ligne,TAILLE_MAX-1,fichier);
		}	
		fclose(fichier);
	}
 	exit(0);
}

Merci d'avance pour votre aide
Lire la suite 

[C] Segmentation fault lecture fichier »

Suggestions
9 réponses
Réponse
+1
moins plus
Oui ok merci bien ca fonctionne ;-)
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

essaie au lieu de
char *tokens[100];

ecrit
char *tokens;
tokens = (char *) malloc(sizeof(char) * TAILLE_MAX);
--
lami20j
Stupeflip- 29 mars 2007 à 14:00
Salut,

EDIT : Après relecture du programme, j'ai l'impression que tu veux en fait faire de tokens un tableau de pointeurs ? Il faudrait faire un malloc du genre :
char **tokens;
tokens = (char **) malloc(sizeof(char *) * TAILLE_MAX);

Mais j'suis pas sur ^^
lami20j- 29 mars 2007 à 14:16
Salut,

j'ai eu le même reflexe que toi :-)
StupeflipStupeflip - 29 mars 2007 à 14:19
Voui ^^
Ajouter un commentaire
Réponse
+0
moins plus
C'est moi qui c'est trompé

en fait tu dois bien utiliser char *tokens[100];

vu que tu as besoin d'un tableau de chaînes de caractères
il te reste à allouer de la mémoire

tokens = (char **) malloc(100)



Ajouter un commentaire
Réponse
+0
moins plus
Non non fais comme Lami20j te dit dans son msg <4> et ça devrait être bon.
Ajouter un commentaire
Réponse
-1
moins plus
merci déja pour votre aide, en fait ce que je voudrais faire c'est pour chaque ligne commencant par "drawing", je recupere dans tableau tokens[] tous les elements :
Ex dans mon fichier usd200607.DAT j'ai la ligne
Drawing : 0001 | 2006-07-01 | LR 3 | 53917.833 | -02.62 +2.89 003.15 |
et donc que en
tokens[0] <- Drawing
tokens[1] <- 2006-07-01
tokens[2] <- LR 3
et ainsi de suite...
Je ne pense pas que le char **tokens soit nécessaire dans ce cas-ci et modifier les strtok aussi
Ajouter un commentaire
Ce document intitulé « [C] Segmentation fault lecture fichier » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?