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 :

fonctionnement de fread


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut fonctionnement de fread
    Bonjour,

    Ci-dessous une petite question sur fread... quelqu'un pourrait m'expliquer ce qu'y se passe concrètement dans le code... ?

    Alors moi je répondrais que fread lit en binaire, et donc la il va lire un octet, donc logiquement dans a il y aura 1 ? C'est cela ou pas ?

    Je ne comprends pas trop pourquoi c'est demandé de donnez la valeur ou le moyen de la calculer...

    A mon avis c'est trop simpliste comme j'ai vu le truc, fread ne doit pas fonctionner comme cela... ?

    Merci
    ++


    Quel est le contenu de la variable a dans le code suivant si le fichier contient les caractères 127 ? Donnez la valeur ou le moyen de la calculer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    short a;
    fread(&a, sizeof(short), 1, FID);

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Si le fichier est constitué uniquement de caractères 127 (\x7F) et qu'on suppose qu'on est sur une plate-forme x86, alors cela signifie que deux octets seront lus et écraseront a.
    Ces octets ayant chacun la valeur 0x7F, a vaudra donc 0x7F7F.
    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
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    J'ai pas trop compris dsl...
    Si on a les caractères 127, chaque caractère est sur un octet non ? Et donc si on lit que un octet, on récupère le premier, donc le caractère 1... ?

    Je ne comprends pas "127 (\x7F)" pour commencer...

    Et pourquoi 2 octets seront lus ?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    127 == 0x7F == 0177

    Et 2 octets sont lus, car sizeof(short)==2.
    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.

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    ah oui j'avais zappé, on lit effectivement les 2 premiers octets mais c'est la que je comprends pas a quoi correspondent ces 2 premiers octets ... ??

    un caractère c'est sur un octet, donc lire les 2 premiers octets, revient à lire les 2 premiers caractères non ? on devrait lit donc d'abord le 1 puis le 2 qui écrase la valeur dans a donc au final on a 2 dans a... je sais pas je vois le truc comme ca...

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ben non, tu lis 1 dans le premier octet de a et 2 dans le second...

    Donc le résultat est ce que vaut en binaire un short où le premier octet vaut 1 et le 2ième vaut 2 ....

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par italiasky
    Quel est le contenu de la variable a dans le code suivant si le fichier contient les caractères 127 ? Donnez la valeur ou le moyen de la calculer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    short a; fread(&a, sizeof(short), 1, FID);
    Il n'y a pas de réponse portable à cette question. Ca peut être
    • 0x7F (127)
    • 0x7F7F (32639)
    • 0x7F7F7F7F (2139062143)
    etc.

    Tout dépend de la taille d'un short sur cette machine.

    Et si il s'agit d'une chaine de caractères, il est encore plus difficile de donner une réponse.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/05/2003, 14h51
  2. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 21h49
  3. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 21h46
  4. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10
  5. fwrite et fread
    Par bohemianvirtual dans le forum C
    Réponses: 5
    Dernier message: 05/06/2002, 12h24

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