[C] Segmentation fault lecture fichier

Résolu/Fermé
lefoufighter Messages postés 277 Date d'inscription lundi 20 novembre 2006 Statut Membre Dernière intervention 12 avril 2018 - 29 mars 2007 à 13:08
lefoufighter Messages postés 277 Date d'inscription lundi 20 novembre 2006 Statut Membre Dernière intervention 12 avril 2018 - 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

A voir également:

5 réponses

lefoufighter Messages postés 277 Date d'inscription lundi 20 novembre 2006 Statut Membre Dernière intervention 12 avril 2018 99
29 mars 2007 à 14:46
Oui ok merci bien ca fonctionne ;-)
1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
29 mars 2007 à 13:25
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 lundi 20 novembre 2006 Statut Membre Dernière intervention 12 avril 2018 99
29 mars 2007 à 13:43
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 jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
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 ^^
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007
29 mars 2007 à 14:16
Salut,

j'ai eu le même reflexe que toi :-)
0
Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94 > Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007
29 mars 2007 à 14:19
Voui ^^
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
29 mars 2007 à 14:10
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 jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
29 mars 2007 à 14:43
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 lundi 20 novembre 2006 Statut Membre Dernière intervention 12 avril 2018 99
29 mars 2007 à 14:31
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