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

Bibliothèque standard C Discussion :

gets contre fgets - chaine de caracteres espace


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut gets contre fgets - chaine de caracteres espace
    Bonsoir,
    je voudrais avoir confirmation:

    voulant demander à l'utilisateur de rentrer un nom voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char *nom;
    ...
    printf("Entrer nom: ");
    scanf("%s", nom);
    Cependant, le scanf est ...enfin voila quoi, et surtout, si l'utilisateur entre un nom composée soit : "truc much" et ba much n'existe pas pour nom.

    J'ai pensé donc à l'utilisation du gets:
    mais dois-je plutôt préférer le fgets?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fgets(nom, strlen(nom), stdin);
    Merci.

    Sachant par suite que j'utilise par exemple le strcpy

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Oui, gets est à proscrire (faq)
    http://c.developpez.com/faq/?page=cl...EEN_gets_fgets

    J'anticipe tes problemes suivants : il faut s'assurer qu'il n'y ait plus rien dans l'entrée standard apres avoir lu une donnée sur l'entrée standard (faq)
    http://c.developpez.com/faq/?page=cl...buffer_clavier

    Note : ton char * ne pointe sur rien qui permette de stoquer des caractères (ya pas de variable de type "chaine", mettez vous ça dans la tete)

  3. #3
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    alors comment, a partir d'un char *nom; utiliser la fonction fgets?

  4. #4
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    Citation Envoyé par nicodn02 Voir le message
    alors comment, a partir d'un char *nom; utiliser la fonction fgets?
    en ouvrant un bouquin de C avant d'essayer de jouer à l'apprenti sorcier peut être?

    fgets attend un pointeur sur une zone mémoire valide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char nom[20];
    fgets(nom,sizeof(nom),stdin);

  5. #5
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    mais pour moi, je doit utiliser ipérativement une
    sinon, les liens précédents me disaient déjà d'avoir quelque chose de valide.

  6. #6
    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
    char* ne signifie pas "zone mémoire magique qui apparait quand on veut".
    C'est juste un pointeur, donc il faut le faire pointer sur quelque chose.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* Ici, pointeur sur un buffer statique */
    char buf[20];
    int taille = sizeof buf;
    char *nom = buf;
     
    fgets(nom, taille, stdin);
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* Ici, allocation dynamique */
    #define TAILLE 20
     
    ...
     
    char *nom = malloc(TAILLE * sizeof *nom);
    fgets(nom, TAILLE, stdin);
     
    ...
     
    free(nom), nom=NULL;
    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.

  7. #7
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    Citation Envoyé par nicodn02 Voir le message
    mais pour moi, je doit utiliser ipérativement une
    c'est dieu qui t'es apparut en rêve et t'as murmuré: "jeanne, écris char *nom; !"

    sérieusement, il faut impérativement te procurer un cours de C.
    la section C de developpez.com regorge de ressources gratuites, ce serait un très bon début.

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. [VBA/EXCEL]comparaison de chaine de caractere avec ou sans espace
    Par rodrigue62 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/07/2007, 10h48
  3. espace dans une chaine de caractere
    Par nathoun92120 dans le forum Flash
    Réponses: 1
    Dernier message: 31/10/2006, 16h40
  4. [RegEx] Insérer espace dans une chaîne de caractères
    Par bb62 dans le forum Langage
    Réponses: 9
    Dernier message: 17/07/2006, 09h01
  5. espaces et chaines de caractere
    Par Ralfman68 dans le forum Langage
    Réponses: 4
    Dernier message: 11/01/2006, 10h11

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