Pb de converstion....

Résolu
sran_isback Messages postés 41 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 30 janvier 2013 - 20 mars 2006 à 19:25
sran_isback Messages postés 41 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 30 janvier 2013 - 23 mars 2006 à 12:28
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

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
23 mars 2006 à 12:09
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
3
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
20 mars 2006 à 21:08
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 mars 2006 à 23:28
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
0
sran_isback Messages postés 41 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 30 janvier 2013
21 mars 2006 à 13:42
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!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
21 mars 2006 à 13:55
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
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
21 mars 2006 à 14:06
voilà, il n'y a aucune allocation dans ces bouts de codes...

___________________________________________________________
Magicalement
Nono
0
sran_isback Messages postés 41 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 30 janvier 2013
21 mars 2006 à 15:56
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!
0
sran_isback Messages postés 41 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 30 janvier 2013
21 mars 2006 à 18:56
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!
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
21 mars 2006 à 20:05
wsprintf(pw1, "%d", iVal); // %s était faux dans le code d'avant
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
21 mars 2006 à 21:25
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
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
22 mars 2006 à 09:47
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
0
sran_isback Messages postés 41 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 30 janvier 2013
23 mars 2006 à 11:29
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!
0
sran_isback Messages postés 41 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 30 janvier 2013
23 mars 2006 à 12:28
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!
0
Rejoignez-nous