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 :

[debutant] prototype fonction


Sujet :

C

  1. #1
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Points : 779
    Points
    779
    Par défaut [debutant] prototype fonction
    Bonjour,

    Je me mets au C avec PellesC dont l'IDE permet d'avoir toutes les fonctions des bibliotheques standard. Pour sscanf (notamment) j'ai ceci :
    Syntax:
    int sscanf(const char * restrict buffer, const char * restrict string, [argument] ...);
    j'avoue que je ne comprends pas vraiment le prototype et notamment les "restrict" buffer et "restrict string". Par ailleurs, la même aide me dit :

    The function reads data from the string buffer, and store the data in objects pointed to by argument. Each argument must be a pointer to a variable of a type that matches the type specifier in format.
    là j'ai bien compris (je pense) : la fonction extrait du buffer stdin (sans doute) une chaine et la stocke dans la variable de "argument" mais je ne vois pas vraiment le lien avec ce qui précède (ces restrict et ces const *char). Ce n'est pas la première fonction de ce type dont je ne comprends pas le prototype donc je pense qu'il y a une (ou plusieurs) notion(s) qui m'échappe(nt).

    Merci.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: [debutant] prototype fonction
    Citation Envoyé par richard
    int sscanf(const char * restrict buffer, const char * restrict string, [argument] ...);
    j'avoue que je ne comprends pas vraiment le prototype et notamment les "restrict" buffer et "restrict string". Par ailleurs, la même aide me dit :
    Pour faire simple, oublie le restrict. Ca sert plus au compilateur qu'à l'utilisateur.

    The function reads data from the string buffer, and store the data in objects pointed to by argument. Each argument must be a pointer to a variable of a type that matches the type specifier in format.
    là j'ai bien compris (je pense) : la fonction extrait du buffer stdin (sans doute) une chaine et la stocke dans la variable de "argument" mais je ne vois pas vraiment le lien avec ce qui précède (ces restrict et ces const *char). Ce n'est pas la première fonction de ce type dont je ne comprends pas le prototype donc je pense qu'il y a une (ou plusieurs) notion(s) qui m'échappe(nt).
    Les 'const' sont là pour signaler à l'utilisateur que les chaines dont les adresses sont passées à la fonction ne sont pas modifiées par la fonction, et qu'il est donc permi de passer l'adresse d'une chaine non modifiable (comme une chaine littérale, par exemple).

    sscanf() s'utilise à peu près comme scanf(). Ce sont les mêmes formatteurs, et la même façon de passer l'adresse de la variable de destination.

    Fait quelques essais, tu verras que c'est assez simple.

    Evidemment, comme toujours, si la variable de destination est un tableau de char ("%s"), celui-ci doit avoir une taillle suffisante.

    Enfin, il faut tester le code retourné pour vérifier que l'on a bien réussi toutes les conversions.

  3. #3
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Points : 779
    Points
    779
    Par défaut
    Merci beaucoup, intervention lumineuse comme d'hab...

    sscanf() s'utilise à peu près comme scanf(). Ce sont les mêmes formatteurs, et la même façon de passer l'adresse de la variable de destination.
    En fait je pose cette question parce que j'ai transformé (enfin j'essaie) en fonction l'exemple d'entrée "sécurisée" dans l'article de la FAQ "eviter scanf". Cet exemple est de ... toi et j'ai été amené a modifier les déclarations de variables donc à m'intéresser au prototype de sscanf (entre autres).

    Merci encore.

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

Discussions similaires

  1. [debutant] appel fonction
    Par Tempotpo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/04/2006, 15h40
  2. Réponses: 7
    Dernier message: 27/03/2006, 16h18
  3. Réponses: 6
    Dernier message: 20/11/2005, 02h53
  4. [ debutant PLPGSQL ] fonction plpgsql
    Par diableblanc dans le forum PostgreSQL
    Réponses: 12
    Dernier message: 01/06/2005, 12h54
  5. [debutant]la fonction scanf
    Par kalaka dans le forum C
    Réponses: 7
    Dernier message: 01/07/2003, 15h15

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