Problème de lecture dans un fichier en C : fscanf [C] - C - Programmation
Marsh Posté le 25-11-2008 à 02:23:34
Salut
Comment est-ce que tu déclares et initialises transition?
Marsh Posté le 25-11-2008 à 08:48:57
ptitchep a écrit : Salut |
Bon, en fait je ne l'initialise pas. Je le déclare plutot simplement :
Code :
|
Marsh Posté le 25-11-2008 à 09:22:09
et comme tu ne controles pas le retour de fscanf ni rien, comment t'es sur qu'il y a pas de la bouillie dans ta transition ?
Marsh Posté le 25-11-2008 à 11:16:12
Taz a écrit : et comme tu ne controles pas le retour de fscanf ni rien, comment t'es sur qu'il y a pas de la bouillie dans ta transition ? |
Euuuuuh... Je devrais peut-être l'initialiser ? Je n'ai aucune certitude sur le contenu de ma transition et je ne savais pas qu'il fallait controler le retour de mon fscanf !!!!
Marsh Posté le 25-11-2008 à 11:20:03
ReplyMarsh Posté le 25-11-2008 à 11:35:09
Taz a écrit : le mieux serait de faire un fgets + sscanf |
Ca marche pas non plus. Maintenant, plus rien ne marche. Ni le fscanf, ni le fgets + sscanf. J'ai même essayé d'initialiser ma "transition" et j'ai toujours l'erreur de segmentation.
AR
Marsh Posté le 25-11-2008 à 11:38:20
Peux-tu poster la partie significative de ton code correspondant à ton problème ?
Ça nous aiderait à situer le souci.
Marsh Posté le 25-11-2008 à 11:46:01
ReplyMarsh Posté le 25-11-2008 à 11:48:29
AigleRoyal a écrit : Bon, en fait je ne l'initialise pas. Je le déclare plutot simplement :
|
Si tu n'initialises pas tes char* ils pointent sur n'importe quoi, d'où l'erreur de segmentation je pense.
edit: grillé
Marsh Posté le 25-11-2008 à 13:14:48
ptitchep a écrit : |
Je ne voulais pas en arriver à poster tout le code, surtout que quand je fais un copier/coller, il n'est pas bien indenté sur le forum. Le voila :
Code :
|
J'ai initialisé ma structure "transition" et rien n'y fait. Je continue d'avoir l'erreur de segmentation.
Marsh Posté le 25-11-2008 à 13:16:12
Non mais tes pointeurs char* sont placés à NULL. Donc quand tu fais ton assignation, ça essaie de mettre des données dans NULL. Et donc, ça segfault.
Marsh Posté le 25-11-2008 à 13:19:44
Elmoricq a écrit : Non mais tes pointeurs char* sont placés à NULL. Donc quand tu fais ton assignation, ça essaie de mettre des données dans NULL. Et donc, ça segfault. |
C'est pour les initialiser que j'ai fait ça. Sinon, je n'initialisais pas avant et j'avais le même résultat
AR
Marsh Posté le 25-11-2008 à 13:24:06
Oui, tu initialises à NULL. Donc au moins, ça plante à chaque fois de façon fiable, plutôt que de ne planter qu'aléatoirement.
Bref :
Taz a écrit : tes char* ils sont pas alloués. utilise des tableaux ou bien fais des malloc |
Marsh Posté le 25-11-2008 à 13:32:06
Elmoricq a écrit : Oui, tu initialises à NULL. Donc au moins, ça plante à chaque fois de façon fiable, plutôt que de ne planter qu'aléatoirement. |
J'y ai pensé mais le problème c'est que je ne connais pas à l'avance la taille que feront les chaines de caractères. Je voudrais pouvoir traiter les deux fichiers suivants de la même manière :
Code :
|
Code :
|
0ù etat1, etat2, stateInEnglish3, q4 et e5 sont les états.
Tu vois ce que je veux dire ? On ne peut pas prévoir à l'avance quelle taille auront le nom des états dans le fichier qui est lu.
Si vous avez des idées...
AR
Marsh Posté le 25-11-2008 à 13:33:57
AigleRoyal a écrit :
|
Eh oui, c'est le problème récurrent de la lecture de données en C.
Les deux solutions les plus courantes :
Dans ton cas, la première solution est peut-être suffisante.
Marsh Posté le 25-11-2008 à 13:37:28
Elmoricq a écrit :
|
Dans ce cas, je fais un tableau suffisamment grand ou un malloc de taille fixe ?
AR
Marsh Posté le 25-11-2008 à 13:39:22
Un malloc() de taille fixe n'a aucun intérêt : l'allocation mémoire dynamique sert surtout lorsque la taille à allouer ne peut être déterminée qu'à l'exécution du code.
Donc un tableau de taille fixe me semble très bien.
Marsh Posté le 25-11-2008 à 13:42:14
Elmoricq a écrit : Un malloc() de taille fixe n'a aucun intérêt : l'allocation mémoire dynamique sert surtout lorsque la taille à allouer ne peut être déterminée qu'à l'exécution du code. |
Ok, je fais ça et je te mets au parfum.
Merci, pour ton aide et ton temps
AR
Marsh Posté le 25-11-2008 à 20:27:33
C'est bon, problème résolu tout marche nikel
Merci à vous tous,
AR
Marsh Posté le 24-11-2008 à 23:09:40
Bonjour tout le monde,
J'ai un problème avec la lecture dans un fichier en C. J'ai un fichier qui contient les lignes suivantes :
J'ai déclaré une structure :
Dans mon code je fais un
J'ai eu un segmentation fault. En déboggant avec gdb, il m'indique un problème dans le fscanf :
J'ai essayé d'ajouter progressivement, les valeurs et leurs formats. Tout marche correctement jusqu'au moment où je rajoute le "transition.nouvel_etat" qui crée le segmentation fault. Autrement dit si je fais :
ca marche nikel. Mais, dès que je rajoute "transition.nouvel_etat", il plante.
J'ai essayé de faire un fgets suivi d'un sscanf et j'ai le même problème. J'ai même essayé de lire le "transition.nouvel_etat" sur la ligne suivante en faisant :
Et gdb m'indique qu'il plante dès que j'arrive à cette ligne. Ca fait plus de 3h que j'écume les forums et les tutos sur la fonctions fscanf et je n'ai encore rien trouvé (je suis peut-être fatigué, lol).
En espérant que vous pourrez m'éclairer.
AR
Message édité par AigleRoyal le 24-11-2008 à 23:22:34