FORUM Syndrome-OC - Jacky-PC


  Programmation


  Autre


  Conversion d'une chaine en entier

 




EeKy NoX et 8 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Conversion d'une chaine en entier

n°6164
DarkBears
j'aime le miel put1 d'abeilles
Posté le 12-10-2005 à 14:34:37  profilanswer
 

Voilà !
 
J'entre une chaine de caractère :
char tab[2];
elle reçoit : 45
 
et je voudrai pouvoir convertir la chaine de caractère pour avoir une variable :
int a;
a = fonction_de_convertion(tab);
printf("%d", a);    // Afficher 45
 
D'avance merci.

mood
Google
Posté le 12-10-2005 à 14:34:37  profilanswer
 

n°6165
Trracer
Posté le 12-10-2005 à 14:36:33  profilanswer
 

avec sscanf je pense...

n°6166
DarkBears
j'aime le miel put1 d'abeilles
Posté le 12-10-2005 à 14:40:17  profilanswer
 

un exemple ?
Parce que je connais pas cette fonction !
(P.S : je suis en C et j'ai pas le droit d'utiliser des trucs de C++)

n°6167
Deather2
OpenBSD: the way to go!
Posté le 12-10-2005 à 16:33:09  profilanswer
 

char tab[2];
 
Si ce truc recoit 45, ou est le 0 qui indique que la chaine est terminée? Tu passes ça à printf, il plantera (segfault) car il ne s'arretera jamais.
Il faut donc faire:
char tab[3];
tab[0] = '4';
tab[1] = '5';
tab[2] = 0;
 
Je ne sais pas comment ton 45 arrive dans ce tableau, mais il faut impérativement un 0 à la fin.
Ensuite, pour l'afficher, tu peux faire:
 
printf("%s", tab);


Message édité par Deather2 le 12-10-2005 à 16:33:30
n°6168
CryoGen
Powered by kitkat©
Posté le 12-10-2005 à 16:53:14  profilanswer
 

atoi() devrai faire l'affaire :)
 
et c'est vrai que ca serai plutot char tab[3] ^^
sauf que le dernier caractere est '\0' et pas 0 ;)


Message édité par CryoGen le 12-10-2005 à 16:55:02

---------------
I am the bone of my sword...
n°6169
Deadog
Dain Bramaged
Posté le 12-10-2005 à 19:09:32  profilanswer
 

sscanf est une méthode un peu lourde pour ça
 
atoi n'est plus conseillé
 
on utilise strtol pour faire ça
strtol(tab, NULL, 10);
le 10 c'est pour la base numérique
 
sinon :
tab[3], bien évidement, oui ...
et 0 ou '\0' c'est pareil
'\0' renvoie le caractère nul dans la local de l'environnement
et 0 est censé être écrit aussi dans la local de l'environnement
donc ça reviens au même
et rajoutons que rare sont les locals qui n'ont pas 0 comme caractère nul :D

n°6170
nicodache
marmotte en chocolat concept ©
Posté le 12-10-2005 à 19:12:51  profilanswer
 

et le null, c'est pour quoi ?
et ya pas une version à deux arguments pour strtol, qui considère par défaut qu'on est en base 10 ?


---------------
modérateur inside [:nicodache] plankaivoo [:nicodache] - ici powered - Je roule en micra 1l 55cv et je t'emmerde :o
n°6171
Deadog
Dain Bramaged
Posté le 12-10-2005 à 19:28:36  profilanswer
 

long int strtol (const char *nptr, char **endptr, int base);
 
 Si endptr n’est pas NULL, strtol() stocke l’adresse du premier caractère invalide dans *endptr.  S’il n’y avait aucun chiffre valide, strtol() stocke la valeur originale de nptr dans *endptr (et renvoie 0).  En particulier, si *nptr n’est pas " \0 " et  si  **endptr vaut " \0 " en retour, la chaîne entière est valide.
 
 
 
et non, pas de raccourcie à strtol. C'est quoi l'interet ? économiser 4 caractères sur le clavier ?

n°6172
nicodache
marmotte en chocolat concept ©
Posté le 12-10-2005 à 19:34:16  profilanswer
 

non. cinq [:grut]
 
mais bon, ya bien sur moyen de faire une fonction strtol perso, genre  

Code :
  1. long int strtol(const char *ptr, char **endptr) {
  2.     return strtol(&ptr, &endptr, NULL);
  3. }

nan ? [:grut]


---------------
modérateur inside [:nicodache] plankaivoo [:nicodache] - ici powered - Je roule en micra 1l 55cv et je t'emmerde :o
n°6173
Deadog
Dain Bramaged
Posté le 12-10-2005 à 20:19:41  profilanswer
 

Code :
  1. long int strtol_10 (const char *ptr, char **endptr) {
  2.   return strtol(ptr, endptr, 10);
  3. }


 
 
revoie tes pointeurs [:matleflou]


Message édité par Deadog le 12-10-2005 à 20:19:59
n°6174
Deadog
Dain Bramaged
Posté le 12-10-2005 à 22:21:41  profilanswer
 

limite ...
 

Code :
  1. #define strtol_10(a,b) strtol(a,b,10)

n°6175
Deather2
OpenBSD: the way to go!
Posté le 12-10-2005 à 23:01:26  profilanswer
 

CryoGen a écrit :

sauf que le dernier caractere est '\0' et pas 0 ;)


C'est pas la même chose?
 

barney% cat test.c  
#include <stdio.h>
 
int main(int argc, char **argv)
{
        printf("%i    %i\n", 0, '\0');
}
barney% ./a.out
0    0


 
;)

n°6176
nicodache
marmotte en chocolat concept ©
Posté le 13-10-2005 à 02:33:02  profilanswer
 

Deadog a écrit :

revoie tes pointeurs [:matleflou]


:fuck:


---------------
modérateur inside [:nicodache] plankaivoo [:nicodache] - ici powered - Je roule en micra 1l 55cv et je t'emmerde :o
n°6177
DarkBears
j'aime le miel put1 d'abeilles
Posté le 13-10-2005 à 08:21:30  profilanswer
 

c'est bon j'ai trouvé !!
Merci pour l'aide.

n°6178
CryoGen
Powered by kitkat©
Posté le 13-10-2005 à 18:22:29  profilanswer
 

Deather2 a écrit :

C'est pas la même chose?
 

barney% cat test.c  
#include <stdio.h>
 
int main(int argc, char **argv)
{
        printf("%i    %i\n", 0, '\0');
}
barney% ./a.out
0    0


 
;)


 
oh ca va hein  [:grut]  
 
mais quand on parle de chaine de caractere donc tableau de char je prefere '\0' pour une simple question de "beauté du code"  :D  


---------------
I am the bone of my sword...
n°6179
Deather2
OpenBSD: the way to go!
Posté le 13-10-2005 à 18:24:23  profilanswer
 

Moi je trouve plus clair de mettre 0, qui indique clairement la valeur 0 signifiant la fin d'un string :p mais d'un point de vue cohérence, ouais, '\0' va mieux... enfin on s'en fou :D

n°6180
nicodache
marmotte en chocolat concept ©
Posté le 13-10-2005 à 19:57:03  profilanswer
 

Deather2 a écrit :

Moi je trouve plus clair de mettre 0, qui indique clairement la valeur 0 signifiant la fin d'un string :p


 
pas d'accord.
parce que 0 peut etre un des caractères de ta string :o


---------------
modérateur inside [:nicodache] plankaivoo [:nicodache] - ici powered - Je roule en micra 1l 55cv et je t'emmerde :o
n°6181
Deadog
Dain Bramaged
Posté le 13-10-2005 à 20:24:08  profilanswer
 

nicodache a écrit :

pas d'accord.
parce que 0 peut etre un des caractères de ta string :o


 
 
la coloration syntaxique c'est pas fait pour les chiens :o


Message édité par Deadog le 13-10-2005 à 20:24:22
n°6182
Deather2
OpenBSD: the way to go!
Posté le 13-10-2005 à 20:30:26  profilanswer
 

nicodache a écrit :

pas d'accord.
parce que 0 peut etre un des caractères de ta string :o


Dans ce cas tu mets '0' :o

n°6188
KnX
To be or not to code.
Posté le 29-10-2005 à 21:42:05  profilanswer
 

Si c'est pour utiliser strtol sans faire de vérif d'erreur derrière, autant utiliser atoi :o

mood
Google
Posté le 29-10-2005 à 21:42:05  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Programmation


  Autre


  Conversion d'une chaine en entier

 

Hit Parade