[Ansi C] caster un int en char* [resolu]

caster un int en char* [resolu] [Ansi C] - C++ - Programmation

Marsh Posté le 18-04-2003 à 10:30:52    

C'est pourtant simple, mais ca marche pas :  

Code :
  1. char *toto;
  2. int ip_proto;
  3. toto = (char *)ip_proto;

 
 
Ca compile tres bien, mais a l'execution, , quand je debugge, le contenu est pas le bon (Address 0x11 out of bounds)
 
Je pesne qu'a priori je caste mal mon int : c koi la bonne solutin ?


Message édité par Burps le 18-04-2003 à 10:43:25
Reply

Marsh Posté le 18-04-2003 à 10:30:52   

Reply

Marsh Posté le 18-04-2003 à 10:36:06    

attends, c'est énorme ce que tu fais la ! tu transformes une valeur numérique en une adresse mémoire !!!! ne t'étonne pas si ça te pète au nez !
 
si tu veux transformer un int en chaine de caractères, alors utilise la fonction itoa() !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-04-2003 à 10:36:28    

si tu expliqué ce que tu veux faire? parce que aucune de tes variables n'est initialisés, c'est correct syntaxiquement (tout et n'importe quoi compile) et le résultat est un comportement parfaitement indéfini

Reply

Marsh Posté le 18-04-2003 à 10:39:01    

toto est de type pointeur, il attend donc d'être initialisé avec une adresse:
 

Code :
  1. toto=(char*)&ip_proto;

Reply

Marsh Posté le 18-04-2003 à 10:41:19    

de toutes façons, on sait pas ce qu'il veut faire   [:spamafote]

Reply

Marsh Posté le 18-04-2003 à 10:42:54    

pfff...
 
Merci Weblook, ct juste ca la soluce...
 
Sinon, Harkonnen, itoa() n'est pas ANSI-C, desole
 
Et ;merci a tous ceux ki ont bien voulu m'aider ;)

Reply

Marsh Posté le 18-04-2003 à 10:44:19    

Attend ... Ce n'est pas un type cast qu'il te faut, là ...
 
 
A ta place, je passerais plutôt par un sprintf ...
 
Là, ce que tu fais, c'est que tu lui dis que ton char * pointe sur la pseudo adresse contenue dans ton int ... Donc forcément, ca marche à la compilation, mais à l'exec, ton pointeur n'est pas du tout au bon endroit ...
 

Code :
  1. char toto[30];
  2. int ip_proto=1234;
  3. snprintf(toto, 30, "%d", ip_proto);
  4. toto[29]=0;


 
là, ca te convertit ton int en chaine de caractères ... MAis si c'est une adresse ip (c'est ce à quoi me fait penser ip_proto)
 
la décomposition en 4 char se ferait plutôt comme ca :
 

Code :
  1. int ip_proto=1234;
  2. char *toto = (char *)&ip_proto;


 
sinon, tu peux toujours utiliser un passage par des structs (qui parait quand même un peu plus propre)
 

Code :
  1. union add_ip {
  2.   int add_totale;
  3.   struct add_chars {
  4.     char d, c, b, a; // L'ordre des variables est important ...
  5.   };
  6. };


 
voilà voilà ... :D


---------------
last.fm
Reply

Marsh Posté le 18-04-2003 à 10:44:55    

apprends ce que ça veut dire un cast. maintenant si ce que tu veux c'est créer une chaine de caractère, représentation textuelle d'un int, essaye sprintf
 
 
 

Code :
  1. char buffer[80];
  2. sprintf(buffer, "%d", 0xdeadbeef);

arghhhhh


Message édité par Taz le 18-04-2003 à 10:45:23
Reply

Marsh Posté le 18-04-2003 à 10:45:43    

J'ai bien pris mon temps pour répondre ... Pas étonnant que je me sois-fait grillaid aux 3/4 :D


---------------
last.fm
Reply

Marsh Posté le 18-04-2003 à 10:45:46    

++Taz a écrit :

de toutes façons, on sait pas ce qu'il veut faire   [:spamafote]  


A mon avis, il veut considérer son int comme un caractère ?
Ou alors faire un truc du style  
 
printf("%d",ip_proto);
 
:??:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-04-2003 à 10:45:46   

Reply

Marsh Posté le 18-04-2003 à 10:46:19    

theShOcKwAvE a écrit :

J'ai bien pris mon temps pour répondre ... Pas étonnant que je me sois-fait grillaid aux 3/4 :D


+1 :/


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-04-2003 à 10:52:54    

merci pour toutes vos precisions
A mon tour de preciser  
 
 
 
 

Code :
  1. int ip_proto = 17;
  2. char *toto,*blu;
  3. toto=(char*)&ip_proto;
  4. blu="\0"
  5. strcat (blu,toto);

 
 
Voila ske je veux faire.
 
D'autre part, je peux pas utiliser printf : stdlib.h (ou string.h, je sais plus a laquelle il appartient) n'est pas compatible avec types.h (une histoire de userland/kernel....)


Message édité par Burps le 18-04-2003 à 11:00:12
Reply

Marsh Posté le 18-04-2003 à 10:57:12    

boom :spookie:

Reply

Marsh Posté le 18-04-2003 à 11:06:46    

enfin... je me rends compte ke je suis pas tres explicite :  
 
Je veux ajouter a "*blu ", ki contient deja du texte, la valeur de ip_proto
 
Mais j'ai encore un souci : une fois caste, toto designe ceci : "17 '\021' "
 
et donc, probleme, toute la chaine vient s'ajouter a mon  "blu"
Or, seul le 17 m'interesse

Reply

Marsh Posté le 18-04-2003 à 11:09:47    

t'as pas l'impression qu'il te manque des allocations de mémoire? apres si tu peux pas utiliser les bibliotheques standard,c 'est que ton environnement n'est pas ANSI, donc on peut rien pour toi

Reply

Sujets relatifs:

Leave a Replay

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