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 :

new_dynamic et fgets : je ne comprends pas


Sujet :

C

  1. #1
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut new_dynamic et fgets : je ne comprends pas
    Bonjour!
    depuis ce matin je m'évertue à comprendre un petit bout de programme et la lumière n'arrive pas...
    voici le fameux code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        printf("\n#> ");
        char* buffer = new_dynamic(sizeof(char)*(MAX_LENGTH_STRING+2));
        char* tmp = fgets(buffer, MAX_LENGTH_STRING+2, stdin);
        if (tmp != NULL){
            char* nl = strchr(buffer, '\n');
            if (nl == NULL){
                buffer[MAX_LENGTH_STRING+1] = '\n';
                buffer[MAX_LENGTH_STRING+2] = '\0';
                int c;
                while ((c = getchar()) != '\n' && c != EOF);
            }
        }
    ce que je ne comprends pas surtout c'est le new_dynamic (et je n'ai pas trouvé des explications efficaces sur le net...
    et la ligne d'après on a un fgets... or, on fait le fgets dans le buffer... mais à priori, c'est pas un fichier non???
    bref... j'aurais bien besoin d'aide...
    merci par avance

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    new_dynamic ne fait pas parti du standard, mais on peut penser que cette fonction est proche de malloc, peut-être avec un système de GC puisse que je ne voit pas de delete_dynamic...

    fgets(buffer, n, stdin)
    lit n charactères depuis stdin et les stocke dans buffer.

    strchr et ce qui le suit rajoute un saut de ligne s'il n'est pas présent dans ce qui a été lu.

    while ((c = getchar()) != '\n' && c != EOF); vide le buffer d'entrée jusqu'au saut de ligne suivant (ou fin de fichier)

  3. #3
    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 Bathou Voir le message
    Bonjour!
    depuis ce matin je m'évertue à comprendre un petit bout de programme et la lumière n'arrive pas...
    voici le fameux code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        char* buffer = new_dynamic(sizeof(char)*(MAX_LENGTH_STRING+2));
    <...>
                buffer[MAX_LENGTH_STRING+1] = '\n';
                buffer[MAX_LENGTH_STRING+2] = '\0';
    Ce code est faux. Si un tableau a une taille de N, l'indice valide le plus grand est N-1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                buffer[MAX_LENGTH_STRING+1-1] = '\n';
                buffer[MAX_LENGTH_STRING+2-1] = '\0';
    ce qui se simplifie (?) en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                buffer[MAX_LENGTH_STRING] = '\n';
                buffer[MAX_LENGTH_STRING+1] = '\0';
    Mais attention, la fin des données va être écrasée.

    De toutes façons, ce code est probablement idiot. En général, ça ne sert à rien d'allouer dynamiquement un tableau de taille fixe (à moins que celui-ci soit utilisé ensuite dans un chainage...).

  4. #4
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    ah bah mince alors, c'était dans un soft que j'ai récupéré...
    merci pour vos réponses, c'est beaucoupl plus clair ^^

  5. #5
    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 Bathou Voir le message
    ah bah mince alors, c'était dans un soft que j'ai récupéré...
    Bah du code faux, les applications en sont remplies... Les gens croient savoir coder, mais c'est souvent faux...

    Mon métier c'est de former les gens pour qu'ils codent mieux...

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

Discussions similaires

  1. Erreur Objet requis : 'this' --> Comprend pas!!
    Par Grozeil dans le forum ASP
    Réponses: 3
    Dernier message: 30/03/2005, 09h46
  2. [thread][methodologie]Quelque chose que je ne comprends pas!
    Par norkius dans le forum Général Java
    Réponses: 5
    Dernier message: 16/03/2005, 14h01
  3. sql ne comprend pas mon where!et me demande des parametres
    Par marie10 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 20/04/2004, 11h08
  4. [Rave] un message que je ne comprends pas
    Par Clotilde dans le forum Rave
    Réponses: 2
    Dernier message: 30/09/2003, 21h46

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