Pb de converstion.... [Résolu]

Signaler
Messages postés
41
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
30 janvier 2013
-
Messages postés
41
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
30 janvier 2013
-
Salut!

Je voudrais convertir des int que je récup (500, 1500 etc...) en LPSTR,
et itoa et sprintf me font planté le prg(j'utilise vs 2005)



comment puis-je faire?



voila un extrait de mon code

code?


LPSTR pw1;

LPSTR pw2;



envois("m",IDT_TIMER1);

envois("\n",IDT_TIMER1);

envois(pw1,IDT_TIMER1);

envois("\n",IDT_TIMER1);

envois(pw2,IDT_TIMER1);

envois("\n",IDT_TIMER1);

KillTimer(hWnd,IDT_TIMER1);

MessageBox(hWnd,"Envoi Réussi!","Info",MB_OK|MB_ICONINFORMATION);



/code



quelques précsion:



envois est une fonction: envois(LPSTR,int)


Merci!

13 réponses

Messages postés
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
Tu n'y arriveras pas comme ça...



char mot=5; -> un seul caractère!!!!



char *str; -> chaine de caractères non allouées

str=(char *)malloc(10*sizeof(char)); -> allocation de 10 caractères



char str2[10]; --> tableau de 10 caractères



Ensuite:

itoa(str,112,10); --> OK

itoa(str2,112,10); --> OK

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Bonsoir,

Tu peux réaliser la convertion d'un int en string comme cela :

wsprintf(pw1, "%s", iVal); // iVal étant de type int

Bonne soirée
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Comment ça sprintf et itoa font planter le programme. C'est pas normale ça. C'est à la compilation qu'il plante?

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
41
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
30 janvier 2013

voila le code



LPSTR pw1=NULL;

LPSTR pw2=NULL;



int iVal=500;



itoa(iVal,pw1,10); ou wsprintf(pw1, "%s", iVal);



envois("m",IDT_TIMER1);

envois("\n",IDT_TIMER1);

envois(pw1,IDT_TIMER1);

envois("\n",IDT_TIMER1);

envois(pw2,IDT_TIMER1);

envois("\n",IDT_TIMER1);

KillTimer(hWnd,IDT_TIMER1);

MessageBox(hWnd,"Envoi Réussi!","Info",MB_OK|MB_ICONINFORMATION);



et l'erreur est une access violation. Bref j'ai mis le code pour que
vous voyez si j'ai fais une conn.... une anerie, car en fait je suis un
gros noob


Merci!
Messages postés
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
Si ton pointeur est NULL, c'est normal que itoa() te jette. Il faut allouer ta chaine avant.

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
voilà, il n'y a aucune allocation dans ces bouts de codes...

___________________________________________________________
Magicalement
Nono
Messages postés
41
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
30 janvier 2013

Et la?

LPSTR pw1;

LPSTR pw2;

pw1 = "50"; // pw1 et pw2 sont ils initialisés?

pw2= "50";



int iVal=500;



itoa(iVal,pw1,10);



envois("m",IDT_TIMER1);

envois("\n",IDT_TIMER1);

envois("750",IDT_TIMER1);

envois("\n",IDT_TIMER1);

envois("750",IDT_TIMER1);

envois("\n",IDT_TIMER1);

KillTimer(hWnd,IDT_TIMER1);

MessageBox(hWnd,"Envoi Réussi!","Info",MB_OK|MB_ICONINFORMATION);



ps : toujours la même erreur ...

Merci!
Messages postés
41
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
30 janvier 2013

j'ai réussi a faire marché _itoa.... mais ça me fais une autre erreur : stack around mot2 was corrupted...



En fait tout ce passe bien jusqu'à la fin... ou ça plante après la fermeture de la message box...



LPSTR pw1;

LPSTR pw2;



int iVal1=500;

char mot1 = 5;



int iVal2=1500;

char mot2 = 5;



_itoa(iVal1,&mot1,10);

_itoa(iVal2,&mot2,10);



pw1 = &mot1;

pw2 = &mot2;



envois("m",IDT_TIMER1);

envois("\n",IDT_TIMER1);

envois(pw1,IDT_TIMER1);

envois("\n",IDT_TIMER1);

envois(pw2,IDT_TIMER1);

envois("\n",IDT_TIMER1);

KillTimer(hWnd,IDT_TIMER1);

MessageBox(hWnd,"Envoi Réussi!","Info",MB_OK|MB_ICONINFORMATION);

Merci!
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

wsprintf(pw1, "%d", iVal); // %s était faux dans le code d'avant
Messages postés
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
Ton utilisation de itoa est fausse: elle attend un char * (une chaine de caractères) et non l'adresse d'un char. Voici un exemple:

char num1[10];
int val=1319;

itoa(num1,val,10);

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
LPSTR = char*

cf winNt.h
typedef CHAR *LPSTR, *PSTR;

donc

LPSTR pw1;
LPSTR pw2;
pw1 = "50"; // pw1 et pw2 sont ils initialisés?
pw2= "50";
NOK

>

LPSTR pw1="50";
LPSTR pw2="50";

à la limite

>

LPSTR pw1[20];
LPSTR pw2[20];
strcpy(pw1, "50");

strcpy(pw2, "50");

là C bon

(nota : le 20 est arbitraire)

___________________________________________________________
Magicalement
Nono
Messages postés
41
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
30 janvier 2013

ben en fait j'ai trouvé un autre truc



LPSTR pw1;

LPSTR pw2;



char mot1 = 5;

char mot2 = 5;



pw1 = &mot1;

pw2 = &mot2;



GetWindowText(receptmot1,pw1,10);

GetWindowText(receptmot2,pw2,10);





envois("m",IDT_TIMER1);

envois("\n",IDT_TIMER1);

envois(pw1,IDT_TIMER1);

envois("\n",IDT_TIMER1);

nvois(pw2,IDT_TIMER1);

envois("\n",IDT_TIMER1);

KillTimer(hWnd,IDT_TIMER1);

MessageBox(hWnd,"Envoi Réussi!","Info",MB_OK|MB_ICONINFORMATION);



la ça marche direct (plus besoins de conversion) mais le prog plante
après la message box avec un "stack around mot1 was corrupted...
comment résoudre ce problème?

Sinon merci à vous pour vos réponse

Merci!
Messages postés
41
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
30 janvier 2013

LPSTR pw1;

LPSTR pw2;



pw1=(char *)malloc(10*sizeof(char));

pw2=(char *)malloc(10*sizeof(char));





GetWindowText(receptmot1,pw1,10);

GetWindowText(receptmot2,pw2,10);





envois("m",IDT_TIMER1);

envois("\n",IDT_TIMER1);

envois(pw1,IDT_TIMER1);

envois("\n",IDT_TIMER1);

envois(pw2,IDT_TIMER1);

envois("\n",IDT_TIMER1);

KillTimer(hWnd,IDT_TIMER1);

MessageBox(hWnd,"Envoi Réussi!","Info",MB_OK|MB_ICONINFORMATION);



Voila donc le code qu'il fallait en faite noter!



JE VOUS DIS VRAIMENT UN GROS MERCI A TOUS POUR VOTRE PATIENCE!!!


Merci!