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 :

Probleme sur les fichiers (fonction fread)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Par défaut Probleme sur les fichiers (fonction fread)
    Bonsoir ;

    je trouve un probleme ici

    un fichier:ANOUAR.TXT
    le contenu de ce fichier : "ANOUAR";
    mais pour aficher on utilise fonction fread mais cette fonction afiche le contenu avec @
    "ANOUAR@" probleme est: @

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include<conio.h>
    #include<stdio.h>
    void main()
    {
    char str[10];
    FILE *f;
    f=fopen("ANOUAR.TXT","r");
    fread(str,sizeof(char),7,f);
    puts(str);
    getch();
    }

  2. #2
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Bonsoir,
    C'est peut-être du au fait que "str" n'est pas initialisé, il contient à priori n'importe quoi.
    De plus il me semble que fread() ne place pas le caractere de fin de chaine '\0' automatiquement(puisqu'elle est spécialisé pour lire des objets et non des chaines).
    Je pense qu'il faudrait mieux utiliser fgets() dans ce cas.

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Par défaut
    Merci ces tres gentile

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Par défaut
    utilisé & devant str comme ça :

    #include<conio.h>
    #include<stdio.h>
    void main()
    {
    char str[10];
    FILE *f;
    f=fopen("ANOUAR.TXT","r");
    fread(&str,sizeof(char),7,f);
    puts(str);
    getch();
    }

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    Citation Envoyé par djelloul_sellami Voir le message
    utilisé & devant str comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include<conio.h>
    #include<stdio.h>
    
    void main()
    {
         char str[10];
         FILE *f;
         f=fopen("ANOUAR.TXT","r");
         fread(str,sizeof(char),7,f);
         puts(str);
         getch();
    }
    Non, str est déjà un pointeur.
    [EDIT]
    Merci matafan de m'avoir corrigé. C'est une grossière erreur de ma part.
    [/EDIT]

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    str n'est pas un pointeur, c'est un tableau. Et pour cette raison, &str est égal à str (ce qui ne serait pas le cas si c'était un pointeur).

    quetzacoatl a déjà expliqué d'où vient le problème.

  7. #7
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonjour,

    Si c'est pour lire du texte, peut-être que la fonction fgets serait-elle plus appropriée.
    Extrait du man fgets:
    fgets() lit au plus size - 1 caractères depuis stream et les place dans le buffer pointé par s. La lecture s'arrête après EOF ou un retour-chariot. Si un retour-chariot (newline) est lu, il est placé dans le buffer. Un caractère nul '\0' est placé à la fin de la ligne.
    Exemple :
    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
    #include<conio.h>
    #include<stdio.h>
     
    void main()
    {
         char str[10];
         FILE *f;
         f=fopen("ANOUAR.TXT","r");
    #if 0
         fread(str,sizeof(char),7,f);
         puts(str);
    #else
         if(fgets(str, 10, f)!=NULL)
             puts(str) ;
    #endif
         getch();
    }

  8. #8
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 91
    Par défaut
    Citation Envoyé par anoir dsr Voir le message
    Bonsoir ;

    je trouve un probleme ici

    un fichier:ANOUAR.TXT
    le contenu de ce fichier : "ANOUAR";
    mais pour aficher on utilise fonction fread mais cette fonction afiche le contenu avec @
    "ANOUAR@" probleme est: @
    Bonjour,

    La fonction fread ne place pas le délimiteur '\0' à la fin de sa lecture; et vu que le tableau récepteur n'a pas été initialisé "toutes-les-cases-à-zéro", alors la fonction puts va continuer à afficher espérant trouver un '\0' pour s'arrêter.

    Tu as été chanceux qu'il s'est trouvé que deux cases plus loin il y avait un 0 donc tu as eu droit seulement à un @, on aurait pu déborder de la chaine si ce zéro n'était pas là.

    Tu as le choix entre placer manuellement un '\0'.
    Ou d'utiliser fgets au lieu de fread.
    Ou d'initialiser la chaine str "toutes les cases à zéro" comme suit :


Discussions similaires

  1. J2EE envoie de mail problem sur les fichiers joints
    Par cesear89 dans le forum NetBeans
    Réponses: 1
    Dernier message: 26/03/2011, 14h30
  2. probleme de lien sur les fichiers swf
    Par phlip1 dans le forum Dreamweaver
    Réponses: 2
    Dernier message: 29/08/2007, 09h27
  3. Réponses: 19
    Dernier message: 18/10/2006, 11h47
  4. Réponses: 6
    Dernier message: 28/04/2004, 10h41
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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