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 :

Pointeur, adresses, et "format specifier" = %p...


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Pointeur, adresses, et "format specifier" = %p...
    1) Il faut utiliser %p pour afficher l'adresse d'un pointeur... Ok !!J'ai lu cela dans les articles ici.merci beaucoup !! J'ai cherché dans "le Langage C" de Kernighan et Ritchie, essayé une recherche dans les articles de forum ici même. Nulle part je ne trouve de liste des "format specifier" tel que (exemple ...) %d pour afficher la valeur d'un int.

    2) Ou trouve t'on documentation sur ces "format specifier", et savoir lesquels utiliser, pour quels résultats. Et : quelle est la traduction française commune en C pour "format specifier " ?

    Je commence en C sur MacOSX, avec le livre de Dave Mark.
    Je joue avec les excercices, et ai adapté le code pour afficher l'adresse mémoire d'une variable. Cela me donne avec %p une valeur comme (exemple) 0xbffffd00, avec une autre variable dans le même code j'obtiens : 0xbffffd04. Comme il est précisé que ma machine affecte 4 Bytes par variable int, cela me semble logique.

    3) C'st quoi comme valeur ? de l'hexadécimal? ou quoi donc?

    4) Est il possible d'afficher cela en valeur décimale ? directement avec un "format specifier " adapté ? ou faut il un grigri traducteur ?


    Merci beaucoup
    Iguanodon

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    1) La syntaxe des formats est spéfifique au langage ("%s" en C devient ".*s" en D) mais les spécificateurs de formats en C (car après tous c'est un forum C ici), ca n'est pas ce qu'il y a de plus dur a trouver ! Ton moteur de recherche préféré -> "c format specifiers"... Comme tu est sur un unixoide, "man printf" te les rapellera également (enfin, jamais eu l'occasion de voir si man existait bien sous MacOS)...

    2) Voir 1.

    3) Voir la doc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         p       The void * pointer argument is printed in hexadecimal (as if by    
                 `%#x' or `%#lx').
    4) Pas directement si on est rigoureux...

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  3. #3
    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: Pointeur, adresses, et "format specifier" = %p
    Citation Envoyé par Iguanodon
    1) Il faut utiliser %p pour afficher l'adresse d'un pointeur... Ok
    ...ou son contenu....
    !!J'ai lu cela dans les articles ici.merci beaucoup !! J'ai cherché dans "le Langage C" de Kernighan et Ritchie, essayé une recherche dans les articles de forum ici même. Nulle part je ne trouve de liste des "format specifier" tel que (exemple ...) %d pour afficher la valeur d'un int.
    En général, c'est dans la doc de fprintf()

    Google -> man fprintf -> 1er choix :

    http://man.developpez.com/man3/fprintf.3.php
    Je commence en C sur MacOSX, avec le livre de Dave Mark.
    Je joue avec les excercices, et ai adapté le code pour afficher l'adresse mémoire d'une variable. Cela me donne avec %p une valeur comme (exemple) 0xbffffd00, avec une autre variable dans le même code j'obtiens : 0xbffffd04. Comme il est précisé que ma machine affecte 4 Bytes par variable int, cela me semble logique.
    parce que ta machine a des bytes de 8 bits, ce qui est le minimum requis par le langage C. Ca peut être plus.
    3) C'st quoi comme valeur ? de l'hexadécimal? ou quoi donc?
    Une adresse, c'est une valeur[1] unique qui désigne un objet en mémoire 'logique'. Ca a ou non à voir avec une adresse physique (sur les systèmes modernes Windows/Unix/Linux/MacOS donc gérant une MMU, c'est non).

    La valeur est représentée en hexadécimal, parce que c'est ce que fait "%p" en général.

    4) Est il possible d'afficher cela en valeur décimale ? directement avec un "format specifier " adapté ?
    Non, et quel intérêt ?
    ou faut il un grigri traducteur ?
    Il n'y a pas de réponse universelle. On peut traduire une représentation hexa en décimal via sprintf() avec "%p" / strtoul() / printf() avec "%lu".

    Mais en x86 mode réel modèle de mémoire large, "%p" donne un format de type <seg>:<ofs>, soit par exemple : 1234:5678. Difficile de traduire ça en 'décimal'. Selon quels critères ?

    ------------
    [1] Rappel : En C, les valeurs internes sont codées en binaire pur avec des 0 et des 1.
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Merci pour le coup de pouce
    Merci beaucoup. Difficile parfois de trouver sans savoir plus avant ce que l'on cherche !.

    Cordialement,
    iguanodon

    [quote="Smortex"]1) La syntaxe des formats est spéfifique au langage ("%s" en C devient ".*s" en D) mais les spécificateurs de formats en C (car après tous c'est un forum C ici), ca n'est pas ce qu'il y a de plus dur a trouver ! Ton moteur de recherche préféré -> "c format specifiers"... Comme tu est sur un unixoide, "man printf" te les rapellera également (enfin, jamais eu l'occasion de voir si man existait bien sous MacOS)...

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

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