Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

probleme avec fopen()


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    octobre 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2019
    Messages : 9
    Points : 0
    Points
    0
    Par défaut probleme avec fopen()
    Bonjour, j'ai coder une fonction "fouvrir" qui prend en paramètre le nom du fichier à ouvrir, test si il est bien ouvert, si il l'est renvoie le pointeur vers le fichier en question et si il ne l'est pas arête le programme. J'ai codé cette fonction il y a 2 jours, je l'avais testé et elle marchait parfaitement bien, cependant maintenant la fonction fopen semble ne plus s’exécuter, le programme s’arrêtant brusquement. Si quelqu'un a une solution, merci de m'en faire part, elle m'empêche d'avancer.

    la fonction en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    FILE* fouvrir(char *name){
     
        FILE* fichier = fopen(name, "r+");
     
        if(fichier == NULL){
            printf("erreur lors de l'ouverture du fichier dictionnaire\n");
            exit(0);
        }
        return fichier;
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 115
    Points : 27 347
    Points
    27 347
    Billets dans le blog
    2
    Par défaut
    Il n'y a pas de problemes dans ce code.
    Même si name gagnerait à etre const.
    Pourquoi crois-tu que le programme s'arrête ici ? Qu'en penses un debugger ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    octobre 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2019
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Le programme ne continue pas et il retourne l'erreur "-1073741819 (0xC0000005)" (je ne sait pas si ça importe mais je suis sur codeBlock).
    Je ne sait pas comment utiliser un debugger, cependant j'ai mit des printf() entre toutes les lignes et le seul qui s'exécutait était celui avant le fopen()

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 115
    Points : 27 347
    Points
    27 347
    Billets dans le blog
    2
    Par défaut
    Pourrait-on avoir le programme complet (je suppose qu'il est plutôt simple) et l'erreur complète ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    octobre 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2019
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Voici les bouts du programme qui posent probleme(le programme n'est pas du tout fini)

    main.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
     
    #include "interaction.c"
    #include "gestionFichier.c"
     
    int main()
    {
        FILE *dico = NULL;
     
        char *mot;
        char lettre = 0;
        int coups = 10;
        int longueurMot = strlen(mot);
        int *isTrouve = setupTab(mot);//tableau sert a : si la lettre nest pas trouver 0, si elle lest isTrouve = la lettre en question
        int gagne = 0;
     
        dico = fouvrir("dico.txt");
        mot = choisirMot(dico, mot);
        fclose(dico);
        //le programme continue apres ca
    gestionFichier.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #include "gestionFichier.h"
     
     
     
    FILE* fouvrir(const char *name){
     
        FILE* fichier = fopen(name, "r+");
     
        if(fichier == NULL){
            printf("erreur lors de l'ouverture du fichier dictionnaire\n");
            exit(0);
        }
        return fichier;
    }
     
    void enumMots(FILE *fichier){
        int nbrMots = 0;
        char mot[20];
     
        rewind(fichier);
        fscanf(fichier, "%d\n", &nbrMots);
        printf("\n\n");
     
        for(int i = 0; i < nbrMots; i++){
            fscanf(fichier, "%s", mot);
            printf("%s\n", mot);
     
        }
        printf("\nNombre de mots : %d\n\n", nbrMots);
     
    }
     
    char* choisirMot(FILE* fichier, char* mot)
    {
     
        int nbrMots = 0;
        char carActuel = 0;
        int i = 0;
     
        rewind(fichier);
        fscanf(fichier, "%d\n", &nbrMots);
     
        const int MAX = nbrMots - 1, MIN = 0;
     
        srand(time(NULL));
        int adresseMot = (rand() % (MAX - MIN + 1)) + MIN;
     
        while (i != adresseMot)
        {
            fscanf(fichier, "%c", &carActuel);
            if(carActuel == '\n')
                i++;
     
        }
     
        fscanf(fichier, "%s", mot);
        return mot;
        //printf("%d --->%s\n", adresseMot, mot);
     
     
    }
    gestionFichier.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #ifndef GESTIONFICHIER_H_INCLUDED
    #define GESTIONFICHIER_H_INCLUDED
     
    FILE* fouvrir(const char *name);
    void enumMots(FILE *fichier);
    char* choisirMot(FILE* fichier, char* mot);
     
    #endif // GESTIONFICHIER_H_INCLUDED

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    octobre 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2019
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process returned -1073741819 (0xC0000005)   execution time : 1.611 s

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    7 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 7 567
    Points : 21 556
    Points
    21 556
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par oildo Voir le message
    Voici les bouts du programme qui posent probleme(le programme n'est pas du tout fini)
    Chez-moi, ce programme compile et tourne sans souci. D'ailleurs ce n'est pas la fonction fouvrir() qui pose problème (même si elle ne casse pas 3 pattes à un canard)

    Citation Envoyé par oildo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "gestionFichier.h"
    FILE* fouvrir(const char *name){
     
        FILE* fichier = fopen(name, "r+");
     
        if(fichier == NULL){
            printf("erreur lors de l'ouverture du fichier dictionnaire\n");
            exit(0);
        }
        return fichier;
    }
    Bon, les défauts de cette fonction
    1. elle ouvre le fichier en "a+" => le fichier doit donc exister sinon fopen() renvoie NULL (mais bon, on va dire que c'est une volonté du cahier des charges...)
    2. elle ouvre le fichier en "a+" => cela veut dire qu'on veut le modifier. Mais le code ne modifie jamais le fichier... (mais bon, il n'est pas fini alors on va dire que...)
    3. si le fichier ne peut pas être ouvert elle quitte sauvagement le programme => on ne quitte jamais un programme depuis une sous fonction. Le programme commence au main() et se termine au main(). Si la fonction ne peut pas faire son travail et que c'est critique alors elle n'a que le droit de retourner une valeur spéciale à son appelant pour qu'il puisse décider (c'est d'ailleurs ce que fait fopen())


    Et la principale critique, c'est que cette fonction pourrait en fait s'écrire FILE* fouvrir(const char *name){ return fopen(name, "r+") } et donc n'a pas une plus-value vraiment exceptionnelle...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    octobre 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2019
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    J'ai écrit cette fonction puisque je préfère juste avoir fouvrir(nom) dans mon programme plutot que de tester toujours si le fichier a bien été ouvert.
    Je n'était pas au courant pour le fait de fermer le programme seulement dans le main.
    Le programme va écrire dans le fichier "dico.txt" et le "r+" est justifié, même si pour le moment je ferme directement le fichier après avoir lu dedans.
    Le fichier "dico.txt" existe, je ne comprend pas pourquoi le programme plante.

    Je tien compte de toutes tes critiques et je vais essayer d'avoir un programme plus propre.

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    7 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 7 567
    Points : 21 556
    Points
    21 556
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par oildo Voir le message
    J'ai écrit cette fonction puisque je préfère juste avoir fouvrir(nom) dans mon programme plutot que de tester toujours si le fichier a bien été ouvert.
    C'est inéluctable en C. Parce que quoi qu'il arrive tu es obligé de tester si fname() s'est bien déroulé.
    Donc en C on est obligé de tester chaque ressource. Le exit() peut rester pendant la phase de développement mais quand le truc devient opérationnel il faut l'enlever.

    Citation Envoyé par oildo Voir le message
    Le fichier "dico.txt" existe, je ne comprend pas pourquoi le programme plante.
    Alors rajoute du printf() pour identifier la source du problème. Je pense perso que ça se passe dans la fonction choisirMot() qui reçoit un pointeur "mot" qu'elle remplit et renvoie (pourquoi le retour d'un truc reçu ça...?). Parce que si jamais tu l'appelles ainsi choisirMot(fp, "toto") (avec une string en dur) alors ça ne peut que planter (une string en dur est invariante). De même si tu l'appelles avec un tableau de taille insuffisante.

    Citation Envoyé par oildo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main()
    {
        char *mot;
        ...
        int longueurMot = strlen(mot);
        ...
    }
    Ah oui, il y a ça aussi qui peut faire foirer le bouzin (je te laisse trouver tout seul pourquoi)...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    octobre 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2019
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    C'est inéluctable en C. Parce que quoi qu'il arrive tu es obligé de tester si fname() s'est bien déroulé.
    Donc en C on est obligé de tester chaque ressource. Le exit() peut rester pendant la phase de développement mais quand le truc devient opérationnel il faut l'enlever.
    J'ai supprimer (du moins arreter d'utiliser, je la supprimerais quand ça marchera) la fonction fouvrir() mais le programme plante encore.

    Citation Envoyé par Sve@r Voir le message
    Alors rajoute du printf() pour identifier la source du problème.
    Je l'ai fait : la fonction qui coince c'est fopen().

    Citation Envoyé par Sve@r Voir le message
    Je pense perso que ça se passe dans la fonction choisirMot() qui reçoit un pointeur "mot" qu'elle remplit et renvoie (pourquoi le retour d'un truc reçu ça...?). Parce que si jamais tu l'appelles ainsi choisirMot(fp, "toto") (avec une string en dur) alors ça ne peut que planter (une string en dur est invariante). De même si tu l'appelles avec un tableau de taille insuffisante.
    Ca ne vien pas de choisirMot, je ne l'appel qu'avec un pointeur et j'ai déjà réussi à la faire marcher (avant que fopen() ne cause un soucis).
    J'ai mit en commentaire la fonction choisirMot() et le programme ne marche pas.

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 115
    Points : 27 347
    Points
    27 347
    Billets dans le blog
    2
    Par défaut
    Ce code est très court et tellement d'erreurs y sont présentes...
    int *isTrouve = setupTab(mot); une fonction inconnue qui retourne un int*
    char *mot; ... int longueurMot = strlen(mot); faudrait au moins (re)lire ce que tu écris
    choisirMot qui fait une écriture sur mot qui est... une variable pas du tout faite pour ça.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    1 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 1 004
    Points : 5 046
    Points
    5 046
    Par défaut
    Bonjour,

    Je note comme problème :
    - des #include de fichiers sources!
    - utilisation des données avant de les initialiser dans main().
    - la fonction enumMots() est gentillette, elle "recherche" (à valider la méthode) le nombre de mots du fichier, puis l'oublie rapidement. A quoi peut-elle servir?
    - la fonction choisirMot() va chercher à copier des données dans un pointeur. Espérons que le pointeur pointe sur un buffer suffisant (décidément ce pointeur mot pose des problèmes)
    - la fonction setupTab(). Je ne l'ai pas trouvée, mais comme ici elle reçoit une donnée non initialisée, elle ne pourra pas aller bien loin.
    - heureusement, il y a la fonction fouvrir() qui n'est pas trop mal (à part le "r+" mais elle pourrait malgré tout fonctionner). Curieusement, c'est l'unique fonction dont nous disposions au départ.

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    octobre 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2019
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Ce code est très court et tellement d'erreurs y sont présentes...
    int *isTrouve = setupTab(mot); une fonction inconnue qui retourne un int*
    char *mot; ... int longueurMot = strlen(mot); faudrait au moins (re)lire ce que tu écris
    choisirMot qui fait une écriture sur mot qui est... une variable pas du tout faite pour ça.
    Je sais que tout ce que j’écris n'est pas parfait, merci de me prévenir de tout ça, mais je ne suis qu'un débutant pas très compétant voulant juste faire des petits programmes, dans ma chambre après les cours. J'essaierais de tout relire et de faire un programme bien plus propre, commenté et sans erreurs aussi choquantes/apparentes

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    octobre 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2019
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par dalfab Voir le message
    Bonjour,

    Je note comme problème :
    - des #include de fichiers sources!
    - utilisation des données avant de les initialiser dans main().
    - la fonction enumMots() est gentillette, elle "recherche" (à valider la méthode) le nombre de mots du fichier, puis l'oublie rapidement. A quoi peut-elle servir?
    - la fonction choisirMot() va chercher à copier des données dans un pointeur. Espérons que le pointeur pointe sur un buffer suffisant (décidément ce pointeur mot pose des problèmes)
    - la fonction setupTab(). Je ne l'ai pas trouvée, mais comme ici elle reçoit une donnée non initialisée, elle ne pourra pas aller bien loin.
    - heureusement, il y a la fonction fouvrir() qui n'est pas trop mal (à part le "r+" mais elle pourrait malgré tout fonctionner). Curieusement, c'est l'unique fonction dont nous disposions au départ.
    -Je ne comprend pas pourquoi avoir des #include de fichier source est un problème, tu pourrais m'expliquer pourquoi s'il te plaît?
    -Je vais rectifier ça, mais j'étais en train de changer mon code, de base toutes les données étaient initialisées
    -La fonction enumMots() servait pour des tests, je la supprimerais.
    -Je vais rectifier ce problème.
    -Je m'occuperais de ça, mais de base j'initialisais "mot" directement.
    -C'est celle qui pose problème

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    7 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 7 567
    Points : 21 556
    Points
    21 556
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dalfab Voir le message
    - la fonction enumMots() est gentillette...


    Citation Envoyé par oildo Voir le message
    -Je ne comprend pas pourquoi avoir des #include de fichier source est un problème, tu pourrais m'expliquer pourquoi s'il te plaît?
    Ce n'est pas vraiment un problème (en réalité ça marche) mais ça casse l'idée d'un développement propriétaire. Si tu fais demain une librairie secrète et très chère, tu seras obligé de livrer les ".h" à ceux qui te l'achètent. Mais si tu livres des ".h" contenant du code tu ne la vendras pas longtemps.

    Citation Envoyé par oildo Voir le message
    -Je m'occuperais de ça, mais de base j'initialisais "mot" directement.
    Ben là on ne le voit pas. Tu sais, on cherche à t'aider mais si tu ne nous fournis pas un code minimaliste reproduisant le problème on ne peut que faire des suppositions

    Citation Envoyé par oildo Voir le message
    -C'est celle qui pose problème
    Ben supprime-là. Qu'est-ce qui t'empêche dans ton programme où tu appelles une seule et unique fois dico=fouvrir("dico.txt") de remplacer par if ((dico=fopen("dico.txt", "a+")) == NULL) {printf("Erreur fopen\n"); exit(0);} ???

    Citation Envoyé par oildo Voir le message
    Je l'ai fait : la fonction qui coince c'est fopen().
    Ah ok. Là désolé on est désarmés. Cette fonction a été écrite par les concepteurs d'Unix (et a été réécrite par Linus Torvald quand il a développé Linux v0.1) donc si elle est défaillante on ne peut rien faire (et on peut accessoirement aussi jeter tous nos codes)...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    octobre 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2019
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ben là on ne le voit pas. Tu sais, on cherche à t'aider mais si tu ne nous fournis pas un code minimaliste reproduisant le problème on ne peut que faire des suppositions
    Je sais bien, mais je n'ai envoyer ça que parce qu'on m'avait demandé, de base, je n'avais envoyé que fouvrir() car elle posait problème

    Citation Envoyé par Sve@r Voir le message
    Ben supprime-là. Qu'est-ce qui t'empêche dans ton programme où tu appelles une seule et unique fois dico=fouvrir("dico.txt") de remplacer par if ((dico=fopen("dico.txt", "a+")) == NULL) {printf("Erreur fopen\n"); exit(0);} ???
    Je voulais l'appeler plusieurs fois, mais je pense faire comme ça.

    Citation Envoyé par Sve@r Voir le message
    Ah ok. Là désolé on est désarmés. Cette fonction a été écrite par les concepteurs d'Unix (et a été réécrite par Linus Torvald quand il a développé Linux v0.1) donc si elle est défaillante on ne peut rien faire (et on peut accessoirement aussi jeter tous nos codes)...
    Pas de soucis merci quand même.

  17. #17
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    1 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 1 004
    Points : 5 046
    Points
    5 046
    Par défaut
    Citation Envoyé par oildo Voir le message
    1) Je ne comprend pas pourquoi avoir des #include de fichier source est un problème, tu pourrais m'expliquer pourquoi s'il te plaît?
    2) Je vais rectifier ça, mais j'étais en train de changer mon code, de base toutes les données étaient initialisées
    3) La fonction enumMots() servait pour des tests, je la supprimerais.
    4)Je vais rectifier ce problème.
    5)Je m'occuperais de ça, mais de base j'initialisais "mot" directement.
    6) C'est celle qui pose problème
    1) Une unité de compilation est composée d'un fichier c et de ses includes. Avoir plusieurs fichier c ensembles est source de problème sans rien apporter. Pour le moment, je te propose surtout de t’intéresser aux bases (les variables, let fonctions et leurs paramètres, les pointeurs) ensuite c'est plus facile de comprendre l'intérêt des includes.
    2) Oui mais justement ton plantage est dû à ça. La chronologie est importante. On initialise une variable puis on s'en sert. Et comme utilise l'ordre inverse ça plante!
    3) Bonne idée. Il faut en effet tester chaque partie puis avancer petit à petit.
    4) pour ce problème il faut comprendre les pointeurs et les buffers (un pointeur ça pointe sur une variable, quand la variable est un tableau on parle d'un buffer, et un buffer de char c'est ce qui peut recevoir une chaîne de caractères.)
    5) Le paramètre et le type de retour ne doivent pas être bons. Tu as prévu de découper en fonction, l'idée est bonne, mais commence par bien comprendre les variables. Comprendre les fonctions, c'est comprendre les paramètres et les retours donc ça nécessite une lucidité sur les variables qui te manque un peu.
    6) Non, justement c'est la seule fonction qui est bonne! Ton problème vient de tes variables surtout mot qui est un pointeur, qui est mal initialisée, qui est mal utilisée. Peut-être que la remplacer par un tableau serait plus simple pour le moment. C'est extrêmement rare de déclarer des pointeurs dans main(), un pointeur c'est fait pour gérer des données qu'une fonction fille reçoit en paramètre, et main() est la fonction mère de toutes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OpenGL ES]Probleme avec fopen
    Par crischprolch dans le forum OpenGL
    Réponses: 6
    Dernier message: 09/04/2008, 15h10
  2. probleme avec fopen !
    Par arnaud036 dans le forum Débuter
    Réponses: 12
    Dernier message: 27/02/2008, 16h05
  3. Probleme avec fopen()
    Par Panaméen dans le forum Bibliothèque standard
    Réponses: 4
    Dernier message: 12/12/2007, 22h25
  4. Réponses: 2
    Dernier message: 25/10/2006, 13h34
  5. Probleme avec fopen sous linux
    Par rivieremathieu dans le forum C
    Réponses: 2
    Dernier message: 16/06/2006, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo