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 :

Problème de droits d'accès


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Par défaut Problème de droits d'accès
    Bonjour à tous,
    Je suis en train de me remettre au C et j'essaie de lire le contenu d'un fichier puis de l'afficher.
    le code est le suivant :
    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
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<iostream>
     
     
    int main();
     
    int main(){
    	FILE *fichier;
    	fichier = fopen("textee.txt","w");
    	fprintf(fichier, "i l");
    	fclose(fichier);
     
    	char a,b;
    	fichier = fopen("textee.txt","r");
    	fscanf(fichier,"%s %s",a,b);
    	printf("%s %s\n",a,b);
    	fclose(fichier);
    return 1;
    }
    A chaque compilation, le premier fichier est bien créé par contre à chaque lecture de ce même fichier, le logiciel plante m'affichant l'erreur suivante "Unhandled exception in essai.exe : 0xC000000R : Access Violation".
    Apparement il doit s'agir d'un problème d'accès à l'un de mes fichiers mais je ne vois pas pourquoi.
    Merci pour votre aide

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Tu ne testes pas si l'ouverture du fichier a réussi.
    Si fopen() retourne un pointeur nul, passer ce pointeur à une fonction agissant sur les flux entraîne un comportement indéfini.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour

    • <iostream> : pas du C
    • Toujours tester le retour de fopen
    • attention à l'utilisation de scanf : les paramètres et le format ne pas logiques ici.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    09-02-06.c:4:19: iostream: No such file or directory
    09-02-06.c:7: warning: function declaration isn't a prototype
    09-02-06.c:9: warning: function declaration isn't a prototype
    09-02-06.c: In function `main':
    09-02-06.c:17: warning: format argument is not a pointer (arg 3)
    09-02-06.c:17: warning: format argument is not a pointer (arg 4)
    09-02-06.c:17: warning: format argument is not a pointer (arg 3)
    09-02-06.c:17: warning: format argument is not a pointer (arg 4)
    09-02-06.c:18: warning: format argument is not a pointer (arg 2)
    09-02-06.c:18: warning: format argument is not a pointer (arg 3)
    09-02-06.c:18: warning: format argument is not a pointer (arg 2)
    09-02-06.c:18: warning: format argument is not a pointer (arg 3)
    09-02-06.c:15: warning: 'a' might be used uninitialized in this function
    09-02-06.c:15: warning: 'b' might be used uninitialized in this function
    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
    #include<stdio.h>
    #include<stdlib.h>
     
    /* main n'a pas d'argument ? on met void*/
    int main(void)
    {
        FILE *fichier;
        fichier = fopen("textee.txt", "w");
        /* test du retour de fopen */
        if (NULL == fichier) {
            /* si quelque chose s'est mal passé, on l'écrit */
            perror("textee.txt");
        } else {
            fprintf(fichier, "i l");
            fclose(fichier);
        }
     
        char a, b;
        fichier = fopen("textee.txt", "r");
        if (NULL == fichier) {
            perror("textee.txt");
        } else {
            /* utilisation de scanf : on veut lire deux caractères */
            fscanf(fichier, "%c %c", &a, &b);
            printf("%c %c\n", a, b);
            fclose(fichier);
        }
        return EXIT_SUCCESS;
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Par défaut
    Apparement il fallait effectivement lui passer des pointeurs. Par contre j'essaie de faire cela dans une autre fonction pour lire des doubles et apparement je n'utilises pas le bon type car ce ne sont pas les bons chiffres qui apparaissent sur ma console.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    valus = fopen("parameters.txt","r");
    if (valus != NULL){
    	printf("entree de boucle\n");
    	fscanf(valus, "%e \t%e \t%e \t%e \t%e \t%e", &xi, &eta, &zeta, &Betac, &rho, &sigma);
    	printf("%e\t%e\t%e\t%e\t%e\t%e\n", xi, eta, zeta, Betac, rho, sigma);
    	fclose(valus);
    	printf("fin boucle\n");
    }
    Betai = zeta*Betac;
    fclose(test);


    .....
    J'ai utilisé le type %lf et cela fonctionne mais je ne sais pas si c'était le plus optimal donc si vous avez une meilleure idée, n'hésitez pas !

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    J'ai utilisé le type %lf et cela fonctionne mais je ne sais pas si c'était le plus optimal
    Optimal, dans quel sens ? qui est le plus rapide, qui est le plus sûr... ?

    Code http://www.rt.com/man/scanf.3.html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           f      Matches an optionally signed floating-point number;
                  the next pointer must be a pointer to float.
     
           e      Equivalent to f.
     
           g      Equivalent to f.

    %e ou %f pour les flottants simple précision (float), %le, %lf pour les double précision (double).

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

Discussions similaires

  1. Problème de droit d'accès aux fichiers (Vista/NTFS)
    Par webgig2002 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 15/07/2009, 17h10
  2. Réponses: 2
    Dernier message: 10/07/2008, 11h36
  3. ReportViewer problème de droit d'accès
    Par flogreg dans le forum ASP.NET
    Réponses: 1
    Dernier message: 11/04/2008, 15h13
  4. Problèmes de droits d'acces
    Par patator68 dans le forum Applets
    Réponses: 2
    Dernier message: 03/12/2007, 10h55
  5. Problème de droits d'accès
    Par hayaet dans le forum Langage
    Réponses: 1
    Dernier message: 29/06/2007, 10h38

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