Rechercher : dans
Par :

[C] Segmentation fault lecture fichier

Dernière réponse le 29 mar 2007 à 14:46:39 lefoufighter, le 29 mar 2007 à 13:08:28 
 Signaler ce message aux modérateurs

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

Il n'existe que deux choses infinies, l'univers et la bêtise humaine...
mais pour l'univers, je n'ai pas de certitude absolue. <Albert Einstein>
Configuration: Linux
Firefox 2.0.0.3

Meilleures réponses pour « [C] Segmentation fault lecture fichier » dans :
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...

1

lami20j, le 29 mar 2007 à 13:25:09

Salut,

essaie au lieu de
char *tokens[100];

ecrit

char *tokens;
tokens = (char *) malloc(sizeof(char) * TAILLE_MAX);
--
lami20j

Répondre à lami20j

2

lefoufighter, le 29 mar 2007 à 13:43:14

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

Il n'existe que deux choses infinies, l'univers et la bêtise humaine...
mais pour l'univers, je n'ai pas de certitude absolue. <Albert Einstein>

Répondre à lefoufighter

3

Stupeflip, le 29 mar 2007 à 14:00:22

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 ^^

Répondre à Stupeflip

5

lami20j, le 29 mar 2007 à 14:16:50

Salut,

j'ai eu le même reflexe que toi :-) lami20j

Répondre à lami20j

6

Stupeflip, le 29 mar 2007 à 14:19:56

Voui ^^

Répondre à Stupeflip

4

lami20j, le 29 mar 2007 à 14:10:40

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)



lami20j

Répondre à lami20j

7

lefoufighter, le 29 mar 2007 à 14:31:07

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
Il n'existe que deux choses infinies, l'univers et la bêtise humaine...
mais pour l'univers, je n'ai pas de certitude absolue. <Albert Einstein>

Répondre à lefoufighter

8

Stupeflip, le 29 mar 2007 à 14:43:47

Non non fais comme Lami20j te dit dans son msg <4> et ça devrait être bon.
Qui n'a rien n'a rien (Proverbe Norvillois)

Répondre à Stupeflip

9

 lefoufighter, le 29 mar 2007 à 14:46:39

Oui ok merci bien ca fonctionne ;-)
Il n'existe que deux choses infinies, l'univers et la bêtise humaine...
mais pour l'univers, je n'ai pas de certitude absolue. <Albert Einstein>

Répondre à lefoufighter