[C] Segmentation fault lecture fichier

Résolu
lefoufighter Messages postés 277 Date d'inscription   Statut Membre Dernière intervention   -  
lefoufighter Messages postés 277 Date d'inscription   Statut Membre Dernière intervention   -
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

A voir également:

5 réponses

lefoufighter Messages postés 277 Date d'inscription   Statut Membre Dernière intervention   99
 
Oui ok merci bien ca fonctionne ;-)
1
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

essaie au lieu de
char *tokens[100];

ecrit
char *tokens;
tokens = (char *) malloc(sizeof(char) * TAILLE_MAX);
--
lami20j
0
lefoufighter Messages postés 277 Date d'inscription   Statut Membre Dernière intervention   99
 
mais maintenant il me mets des erreurs qd j'utilise tokens probleme de cast avec les pointeurs je dois changer quoi ?

datSQL.c: In function ‘main’:
datSQL.c:29: warning: assignment makes integer from pointer without a cast
datSQL.c:30: warning: comparison between pointer and integer
datSQL.c:32: warning: assignment makes integer from pointer without a cast
datSQL.c:35: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast

0
Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
 
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 ^^
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention  
 
Salut,

j'ai eu le même reflexe que toi :-)
0
Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94 > Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention  
 
Voui ^^
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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)



0
Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
 
Non non fais comme Lami20j te dit dans son msg <4> et ça devrait être bon.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lefoufighter Messages postés 277 Date d'inscription   Statut Membre Dernière intervention   99
 
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
-1