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 :

comment ecrire une adresse a l'ecran avec write


Sujet :

C

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 16
    Points : 15
    Points
    15
    Par défaut comment ecrire une adresse a l'ecran avec write
    je dois ecrire une adresse a l'ecran avec la fonction write(2) sous unix
    je m'explique par exemple j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void *tutu = NULL;
    tutu = malloc(10 * sizeof (char));
    et la je veux afficher l'adresse de tutu (par ex 0x8423aafa à l'ecran)
    je n'ai aucune idee de comment faire pouvez vous m'aider au moins me mettre sur la voie.


    je vous remercie

  2. #2
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 339
    Points : 130 357
    Points
    130 357
    Billets dans le blog
    1
    Par défaut
    A ta place je convertirai d'abord l'adresse en chaîne de caractères avec sprintf() ou snprintf() en utilisant le modificateur %p ou %x selon ce que tu préfères, puis j'afficherai cette chaîne en utilisant write() et le descripteur STDOUT_FILENO.

  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
    Citation Envoyé par Anomaly
    A ta place je convertirai d'abord l'adresse en chaîne de caractères avec sprintf() ou snprintf() en utilisant le modificateur %p ou %x selon ce que tu préfères
    Il n'y a pas le choix. C'est "%p" et le cast en (void*).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf (s_out, "%p", (void *) p);

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    %x et %X ont le mérite de permettre le choix de la casse (je n'ai pas vu cette distinction pour les pointeurs)...

    Si on n'a pas l'intention de sortir de l'architecture 32bits, cela ne cause pas de problème...

    < EDIT pour ne pas polluer le topic avec des messages multiples >
    Oui c'est important, j'ai énormément de mal à lire de l'hexa en minuscules.
    D'ailleurs, tu l'as dit toi-même, c'est utile à des fins de débogage: Il est donc important que le programmeur ait une ergonomie facilitant la lecture, ou il risque de se prendre la tête encore plus.

    De plus, j'enfonce le clou du débogage: C'est déjà pas de la tarte de se débrouiller pour que le mode release soit à la fois potable et portable, alors pour le mode debug, je place l'efficacité du débogage au-dessus de la portabilité.

  5. #5
    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
    Citation Envoyé par Médinoc
    %x et %X ont le mérite de permettre le choix de la casse (je n'ai pas vu cette distinction pour les pointeurs)...
    C'est important ? Au point d'écrire du code non portable ? N'oublions pas qu'afficher la valeur d'un pointeur n'a pas d'interêt applicatif. Par contre, ça peut avoir un interêt pédagogique ou être utile en phase de debug.
    Si on n'a pas l'intention de sortir de l'architecture 32bits, cela ne cause pas de problème...
    Il est beaucoup plus difficile d'écrire du code non portable correct que du code portable correct...

  6. #6
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    et bien
    Il n'y a pas le choix. C'est "%p" et le cast en (void*).
    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf (s_out, "%p", (void *) p);
    et bien le probleme je n'est pas le droit a la fonction sprintf.
    Et franchement je n'est aucune idee de comment faire

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Dans ce cas, tu risques de devoir faire ta propre conversion valeur-> chaîne hexadécimale...

  8. #8
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Merci je crois que je vais faire ca

  9. #9
    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
    Citation Envoyé par Meyn
    Il n'y a pas le choix. C'est "%p" et le cast en (void*).
    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf (s_out, "%p", (void *) p);
    et bien le probleme je n'est pas le droit a la fonction sprintf.
    Pour quelle raison ?
    Et franchement je n'est aucune idee de comment faire
    alors mauvaise nouvelle, il n'y a pas de solution portable, car la représentation textuelle des pointeurs peut varier d'une machine à l'autre (largeur, registres...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1234
    123456
    12345678
    DS:1234
    CS:5678
    1234:5678
    etc.
    Quelle est ton architecture ?

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

Discussions similaires

  1. comment structurer une modél. UML - projet J2EE avec pattern
    Par RocketArena dans le forum Architecture
    Réponses: 18
    Dernier message: 20/07/2007, 19h20
  2. Comment tester une adresse mail ?
    Par jackop dans le forum Langage
    Réponses: 5
    Dernier message: 08/09/2005, 16h19
  3. Réponses: 4
    Dernier message: 30/05/2005, 10h29
  4. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

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