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 :

Pouvez vous m'expliquer?


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 103
    Par défaut Pouvez vous m'expliquer?
    Bonjour a tous

    1/ Comment récupérer l'entier qui nous place à la position 0 dans le fichier si ce prototype renvoie rien?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void rewind(FILE* pointeurSurFichier);
    2/
    Citation d'un totorial :
    Ce schéma montre que la chaîne écrite par fgets était "Mateo\n\0". Nous avons remplacé le \n par un \0, ce qui a donné au final : "Mateo\0\0".
    Ce n'est pas grave d'avoir deux \0 d'affilée. L'ordinateur s'arrête au premier \0 qu'il rencontre et considère que la chaîne de caractères s'arrête là.
    Il y a un problème dans ce qu'il dit car si j'alloue un tableau de 6 char et j'entre le mot "Salut" alors il y aura "Salut\n\o" et même si je remplace \n par \0 j'aurais "Salut\0\0" donc débordement ?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    1. Faire un ftell() après le rewind() ?
    2. C'est un problème au niveau taille du buffer, mais pas au niveau lecture de celui-ci. Après tout, si tu copies la chaîne, tu ne copieras que le premier caractère nul...
    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
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    1- La position courante est un élément de la structure opaque FILE. La fonction rewind() remet la position courante du fichier passé en argument au début de ce fichier.


    2- Si tu as un tableau de 6 char, alors il peut contenir la chaine "Salut", mais pas la chaine "Salut\n". Tu n'y peux rien, sauf redimensionner le tableau à 7.

    Note : le '\n' est mis par fgets() dans la chaine si il figure dans l'entrée lue (au contraire de gets(), mais cette fonction est obsolète)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 103
    Par défaut
    Merci..


    Pour la 2eme question il est dit pour ce code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        int main(int argc, char *argv[])
     {
           char nom[10];
     
           printf("Quel est votre nom ? " );
           lire(nom, 10);
           printf("Ah ! Vous vous appelez donc %s !\n\n", nom);
     
           return 0;
       }

    La fonction fgets étant sécurisée, elle s'est arrêtée de lire au bout du 9ème caractère, car nous avions alloué un tableau de 10 char (il ne faut pas oublier le caractère de fin de chaîne \0 qui occupe la 10ème position).
    Le problème, c'est que le reste de la chaîne qui n'a pas pu être lu, à savoir "ard Alber 1er", n'a pas disparu ! Il est toujours dans le buffer.
    Résultat:
    Quel est votre nom ? Jean Edouard Albert 1er
    Ah ! Vous vous appelez donc Jean Edou !


    Mais pourquoi il dit que la fonction fgets s'est arrêtée de lire au bout du 9ème caractère, car ce que j'ai compris c'est que fgets s'arrête au 8ème caractère, le 9ème étant "\n" et la 10ème "\0" ??

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    Si tu saisis trop de caractères pour le buffer, le \n n'est pas mis dedans.

    C'est comme ça qu'on peut savoir si l'on doit faire le ménage dans le flux d'entrée: Si l'on n'a pas le \n dans le buffer, c'est que la ligne était trop longue et il faut faire le ménage.

    Un exemple ici: http://www.developpez.net/forums/d77...s/#post4460243
    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.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 103
    Par défaut
    Merci..

    Si j'ai bien compris le "\n" se trouve a la fin de Jean Edouard Albert 1er car on a appuyé sur la touche entré et non a la fin de Jean Edou ??

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    On va dire que oui.

    Résultat, si tu refais un fgets() juste après sans nettoyer entre temps, tu auras droit à "art albert 1er\n" (en supposant que le second fgets() se fasse sur un buffer assez grand).
    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.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 28/04/2010, 16h33
  2. pouvez vous m'expliquer cette requet?
    Par hayat2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/05/2009, 07h57
  3. Pouvez vous m'expliquer ce code ?
    Par sayfouche dans le forum C#
    Réponses: 6
    Dernier message: 09/04/2008, 23h36
  4. Réponses: 1
    Dernier message: 01/10/2007, 17h32
  5. Serveur ftp pouvez vous m'expliquer svp
    Par fred59 dans le forum Dépannage et Assistance
    Réponses: 2
    Dernier message: 07/12/2006, 18h37

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