[C] Lire et afficher un pointeur générique

Lire et afficher un pointeur générique [C] - C - Programmation

Marsh Posté le 09-12-2004 à 13:26:45    

Je cherche à lire et à afficher un pointeur générique ,  
et ensuite lui passer d'autres types.
 
exemple :
 
void *var;
 
scanf("%???",&var);
printf("%???",var);
 
Pour le printf je pense que c'est %p.
Mais pour le scanf ?


Message édité par miniserveur le 09-12-2004 à 14:00:10

---------------
www.sagis.tk
Reply

Marsh Posté le 09-12-2004 à 13:26:45   

Reply

Marsh Posté le 09-12-2004 à 13:31:17    

tu veux demander a l'utilisteur d'entrer une addresse ? [:mlc]

Reply

Marsh Posté le 09-12-2004 à 13:34:28    

miniserveur a écrit :

Je cherche à lire et à afficher un pointeur générique ,  
et ensuite lui passer d'autres types.
 
exemple :
 
void *var;
 
scanf("%???",&var);
printf("%???",var);
 
Pour le printf je pense que c'est %p.
Mais pour le scanf ?


La norme dit que c'est aussi "%p", mais la chaine à entrer doit être au même format que celle sortie par printf() avec "%p". Ca dépend de l'implémentation. Elle dit aussi qu'il vaut mieux savoir ce qu'on fait...

Citation :


Committee Draft — January 18, 1999 WG14/N869
7.19.6.2 The fscanf function
<...>
p Matches an implementation-defined set of sequences, which should be the
same as the set of sequences that may be produced by the %p conversion of
the fprintf function. The corresponding argument shall be a pointer to a
pointer to void. The input item is converted to a pointer value in an
implementation-defined manner. If the input item is a value converted earlier
during the same program execution, the pointer that results shall compare
equal to that value; otherwise the behavior of the %p conversion is undefined.


Message édité par Emmanuel Delahaye le 09-12-2004 à 13:39:55

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 09-12-2004 à 13:50:58    

D'accord j'ai déjà essayé, quand on passe un entier ça marche , mais un autre type ça ne marche plus.
 
void *var;  
 
printf("Saisir une donnée de n'importe quel type :" );  
scanf("%???",&var);  
printf("%???",var);


---------------
www.sagis.tk
Reply

Marsh Posté le 09-12-2004 à 16:51:33    

miniserveur a écrit :

D'accord j'ai déjà essayé, quand on passe un entier ça marche , mais un autre type ça ne marche plus.
 
void *var;  
 
printf("Saisir une donnée de n'importe quel type :" );  
scanf("%???",&var);  
printf("%???",var);


Comme précisé dans la norme, il faut passer une adresse et rien d'autre. Elle doit être au bon format, et elle doit être valide. L'intérêt de la manip est limité.
 
Que cherches-tu à faire exactement ?


Message édité par Emmanuel Delahaye le 09-12-2004 à 17:37:43

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 09-12-2004 à 17:14:41    

Tu es dans quel groupe de TP miniserveur?

Reply

Marsh Posté le 10-12-2004 à 14:31:46    

Rentrer une valeur du type Hexadecimal, par exemple.
C'est pour un test, c'est bon maintenant.


---------------
www.sagis.tk
Reply

Marsh Posté le 10-12-2004 à 15:54:45    

miniserveur a écrit :

Rentrer une valeur du type Hexadecimal, par exemple.


Code :
  1. unsigned long n;
  2.    char s[32];
  3.    fgets(s, sizeof s, stdin);
  4.    n = strtoul(s, NULL, 16);


Message édité par Emmanuel Delahaye le 10-12-2004 à 15:55:07

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed