IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Ouverture d'un fichier avec son nom


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut Ouverture d'un fichier avec son nom
    bonjour,
    je charge un fichier dans lequel je sotck les valeurs dans un tableau.
    ce fichier s'apelle : "level1.txt"
    mais lorsque que je tape son nom le fichier ne s'ouvre le probleme doit resier dans la manipulation de la chaine de caractere

    j'ai un debug assertion invalid
    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
     
    void main (void)
    {
     
            FILE *fp;       
            char *myname;
     
            myname = (char*)malloc(256 * sizeof (char));
            scanf("%s",&myname);
     
            fp = fopen("myname","r");
    				 for ( int i =0 ; i < 5 ; i++ )
    				     for ( int j=0 ; j< 6 ; j++)
    					      fscanf(fp,"%d",&Tab[i][j]);
     
            fclose(fp);
            free(myname);
    }
    Cordialement Bruno

  2. #2
    Membre habitué
    Inscrit en
    Novembre 2002
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 120
    Points : 125
    Points
    125
    Par défaut
    Plusieurs choses:

    1) sizeof(char) == 1, donc la multiplication est inutile dans le malloc().

    2) le scanf est absolument à proscrire. Utilise plutôt fgets() et vire le '\n' terminal. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int getstring(char *s, size_t n) {
      if (fgets(s, n, stdin) != NULL) {
        char *p = strchr(s, '\n');
        if (p != NULL) *p = '\0';  /* on vire le '\n' terminal */
        return 1;
      }
      return 0;  /* erreur de lecture: fin de fichier ou autre */
    }
    3) Tu ne vérifie pas que le fichier fp est bien ouvert, et en plus tu lui donne en paramètre un nom de fichier erroné. Correction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ((fp = fopen(myname, "r")) == NULL) {
      perror(myname);   /* affichage de l'erreur */
      /* On saute ensuite la lecture du fichier ainsi que sa fermeture */
    }
    4) Ceci est un peut du pinaillage, mais c'est se compliquer la vie pour rien de faire une allocation dynamique d'un tableau dont la taille est fixe et de 256 octets seulement.

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut
    Correction du programme
    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
    // un des prototypes de main est int main(void)
    int main (void)
    {
     
            FILE *fp;       
            char *myname;
     
            // myname = (char*)malloc(256 * sizeof (char));
            // par définition sizeof(char) = 1
            // le cast en C est inutile et il peut cacher l'oubli de l'inclusion du fichier .h nécessaire
            myname = malloc(256);
     
           // il faut tester le retour de malloc
          if (myname == NULL)
          {
             fprintf(stderr, "Pb malloc\n");
             return 0;
          }
     
           // pour scanf il donner l'adresse ou ranger, donc myname 
          // et non l'adresse du pointeur
            scanf("%s",myname);
     
         // note scanf est déconseillé car très difficile d'utilisation
         // il vaut mieux utiliser fgets(myname, 256, stdin);
     
            fp = fopen("myname","r");
           // il faut tester le retour de fopen
          if (fp == NULL)
          {
              fprintf(stderr, "Pb ouverture %s\n", myname);
             free(myname);
             return 0;
          }
     
                 for ( int i =0 ; i < 5 ; i++ )
                     for ( int j=0 ; j< 6 ; j++)
                         fscanf(fp,"%d",&Tab[i][j]);
     
            fclose(fp);
            free(myname);
      return 0;
    }
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,
    juste une petite correction à ton code Trap D, lorsqu'une erreur se produit, il ne faut pas faire un mais un ou tout autre chiffre différent de 0 pour que l'OS sache que ça n'a pas bien fonctionné. C'est utilile sous Linux lorsque l'on lance plusieurs commandes qui dépendent les unes des autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ ./configure && make && make install
    par exemple.

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Très juste gege2061, mais comme je n'utilise jamais *nix et que je ne travaille pas sous DOS je n'y avais pas pensé.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut yhg
    rebonjour,

    le code se compile parfaitement par contre impossible d'ouvrir mon fichier level1.txt qui pourtant est bien existant
    je tape bien : level1.txt

    mais il me dis pb d'ouverture level1.txt

    Voila merci

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Se trouve-t-il dans le répertoire d'exécution ?
    Donnes-tu le bon nom, il est difficile pour nous de savoir.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Trap D
    Se trouve-t-il dans le répertoire d'exécution ?
    Donnes-tu le bon nom, il est difficile pour nous de savoir.
    et aussi avec la bonne casse si tu es sous unixoide ou XP.

    level1.txt != LEVEL1.TXT != Level1.txt etc.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Ouverture d'un fichier avec son nom
    Citation Envoyé par bonjour69
    je charge un fichier dans lequel je sotck les valeurs dans un tableau.
    ce fichier s'apelle : "level1.txt"
    mais lorsque que je tape son nom le fichier ne s'ouvre le probleme doit resier dans la manipulation de la chaine de caractere

    j'ai un debug assertion invalid
    Il est inutile d'allouer dynamiquement une taille fixe à moins qu'on cherche à la réallouer...

    scanf() avec "%s" attend l'adresse d'une chaine, pas l'adresse d'un pointeur sur chaine. Normal que ça ne fonctionne pas (il suffit de faite puts (myname); pour s'en rendre compte...

    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut gf
    bonjour


    Mon fichier est dans le bon repertoire, je tape effectivemment le bon nom mais egalement quand je fais
    un j'obtient tient bien mon : level1.txt
    donc le fichier doit être normalement bien chargé

    mais bon bizarre j'ai le meme plantage ..

    Merci

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    bonsoir,
    si je peux me permettre une suggestion, tu devrais essayer:

    sans les guillemets.

  12. #12
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Plus c'est gros, moins on voit !!!
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    c'est l'avantage d'être petit comme moi, on fait tellement d'erreurs de ce type qu'on en devient parano à chaque relecture.

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par artatum
    bonsoir,
    si je peux me permettre une suggestion, tu devrais essayer:

    sans les guillemets.
    ARF!On va tous se laver les yeux!
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut hjh
    Rebonjour,

    Même avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           fp = fopen(myname,"r");
    j'ai toujours" pb d'ouverture fichier" qui s'affiche ://
    le fichier est dans le bon repertoire courant
    je l'appelle par level.txt avec les mon caracteres j'ai essayé sans l'extension mais impossible.


    Merci

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: hjh
    Citation Envoyé par bonjour69
    Même avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           fp = fopen(myname,"r");
    j'ai toujours" pb d'ouverture fichier" qui s'affiche ://
    le fichier est dans le bon repertoire courant
    je l'appelle par level.txt avec les mon caracteres j'ai essayé sans l'extension mais impossible.
    Tu peux l'ouvrir avec autre chose ? Un éditeur...

    Sinon, tu utilises quel environnement de développement ?
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut b
    bonjour,


    j'utilise visual C++ 6.0 c'est extremement bizarre , j'ai encore tripatouillé de partout mais rien a faire.. :/


    ++ Bruno

  18. #18
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    As-tu essayé en donnant le chemin absolu du fichier ?
    As tu essayé de lancer l'exe en cliquant dessus sous Windows ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    salut, est-ce que tu pourrais mettre le code complet ? parce que la version postée est incompilable, je ne peux rien tester.

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    bonsoir,

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    FILE *fp;
     
    int main (void) { 
     
    	char *myname;
    	myname = (char*)malloc(256 * sizeof (char)); 
             scanf("%s",myname); 
     
             fp = fopen(myname,"a"); 
    	 fprintf(fp,"%s","hello");
             fclose(fp); 
             free(myname); 	
     
    	return 0; 
     
    	}
    j'ai essayé ce code (compilé sous gcc), et il marche impeccable, en m'ouvrant le fichier myname.

    est-ce que cela te donne une piste ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Ouverture d'un fichier avec son programme
    Par Tornade8912 dans le forum VB.NET
    Réponses: 13
    Dernier message: 04/04/2015, 15h59
  2. Chercher fichier avec son nom
    Par Lexounet dans le forum VBScript
    Réponses: 16
    Dernier message: 26/05/2011, 09h31
  3. Ouverture d'un fichier avec un nom variable
    Par setauh dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/09/2009, 07h19
  4. Recuperer le contenu d'un fichier avec son nom et son chemin
    Par varfendell dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 16/07/2008, 09h47
  5. ouverture d'un fichier avec son application associée
    Par gerard tarquin dans le forum Général Python
    Réponses: 3
    Dernier message: 28/07/2007, 15h08

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