Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2756 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Help : atoi... ou la convertion de char en int.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Help : atoi... ou la convertion de char en int.

n°568907
greeeg
Posté le 17-11-2003 à 13:27:27  profilanswer
 

Bonjour,  
 
j'ai un tableau de char dans lequel est stocké 1 chiffre par case, et j'aimerais convertir ces char en INT !
 
J'ai fais comme cela :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main (int argc, char * argv [])
  4. {
  5. int longueur_nombre1,longueur_nombre2;
  6. int val_temp,
  7. val_temp=atoi(argv[1][1]);
  8.    
  9.         printf("%i", val_temp);}


 
Or le programme plante...
 
HELP  :cry:  
 

mood
Publicité
Posté le 17-11-2003 à 13:27:27  profilanswer
 

n°568910
chrisbk
-
Posté le 17-11-2003 à 13:31:13  profilanswer
 

%i ? C'est nouveau ?
 
bon sinon c'est du grand n'importe quoi ton truc machin

n°568923
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 13:44:12  profilanswer
 

[:xx_xx]
 
[:neowen]

n°568925
greeeg
Posté le 17-11-2003 à 13:46:47  profilanswer
 

excusez moi les gars si je débute

n°568944
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 13:58:59  profilanswer
 

c'est quoi ça ?

Code :
  1. argv[1][1]


argv est un tableau de char *. donc argv[0] est le nom du programme (si je me souviens bien), argv[1] est un pointeur vers le 1er paramètre, etc...
argv[1][1] c'est n'importe quoi ! si tu veux accéder au 1er paramètre, c'est argv[1] !
de plus, "%i" ça n'existe pas, c'est "%d\n"
 
c'est du C de base quoi...


Message édité par Harkonnen le 17-11-2003 à 13:59:22
n°568959
Moktar1er
No one replies...
Posté le 17-11-2003 à 14:17:11  profilanswer
 

si 1 chiffre par case alors argv[1][0]:1er chiffre, argv[1][1]:2eme chiffre etc.
en C les tableaux commencent à 0 et pas à 1!!!

n°568964
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 14:25:30  profilanswer
 

moktar1er a écrit :

si 1 chiffre par case alors argv[1][0]:1er chiffre, argv[1][1]:2eme chiffre etc.
en C les tableaux commencent à 0 et pas à 1!!!


oui ok, mais j'ai un doute sur argv[0] : c'est le nom du programme ou le 1er paramètre (il me semble que c'est le nom du programme, ou je confonds avec argc qui contient le nombre de paramètres + le nom du programme... [:meganne])


Message édité par Harkonnen le 17-11-2003 à 14:29:26
n°568966
Moktar1er
No one replies...
Posté le 17-11-2003 à 14:27:19  profilanswer
 

Harkonnen a écrit :


oui ok, mais j'ai un doute sur argv[0] : c'est le nom du programme ou le 1er paramètre (il me semble que c'est le nom du programme, ou je confonds avec argc qui contient le nombre de paramètres + le nom du programme... [:meganne])


 
non non tu as raison, argv[0] c'est le nom du programme.
où je voulais intervenir c'était sur argv[1][1]; le premier 1 est sans doute OK mais sur le 2ème j'ai un doute, surtout s'il teste avec une manip du genre: "monprog.exe 5"

n°568967
nraynaud
lol
Posté le 17-11-2003 à 14:29:16  profilanswer
 

Harkonnen a écrit :


oui ok, mais j'ai un doute sur argv[0] : c'est le nom du programme ou le 1er paramètre (il me semble que c'est le nom du programme, ou je confonds avec argc qui contient le nombre de paramètres + le nom du programme... [:meganne])

ça confirme ce que....
 
 
le premier, argc (argument count) est le nombre de cases dans le deuxième. La première case du deuxième (argv, argument vector) est effectivement le nom du fichier qui a été exécuté (nom de l'exécutable ou du lien symbolique vers l'exécutable).


---------------
trainoo.com, c'est fini
n°568968
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 14:30:51  profilanswer
 

moktar1er a écrit :


 
non non tu as raison, argv[0] c'est le nom du programme.
où je voulais intervenir c'était sur argv[1][1]; le premier 1 est sans doute OK mais sur le 2ème j'ai un doute, surtout s'il teste avec une manip du genre: "monprog.exe 5"


 
ben argv[1][1] ne veut rien dire, puisque argv est un tableau de chaines de caractères ! en fait, argv[1][1] sera le 2eme caractère du 1er argument

mood
Publicité
Posté le 17-11-2003 à 14:30:51  profilanswer
 

n°568969
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 14:31:43  profilanswer
 

nraynaud a écrit :

le premier, argc (argument count) est le nombre de cases dans le deuxième. La première case du deuxième (argv, argument vector) est effectivement le nom du fichier qui a été exécuté (nom de l'exécutable ou du lien symbolique vers l'exécutable).


ben alors, j'avais raison ! argc contient bien le nombre de paramètres + le nom du programme !

n°568971
Moktar1er
No one replies...
Posté le 17-11-2003 à 14:33:27  profilanswer
 

Harkonnen a écrit :


 
ben argv[1][1] ne veut rien dire, puisque argv est un tableau de chaines de caractères ! en fait, argv[1][1] sera le 2eme caractère du 1er argument


 
nous sommes d'accord très cher baron ;)
le monsieur voudrait récupérer chiffre par chiffre
donc s'il ne passe qu'un chiffre en paramètre et qu'il tape à l'indice 1 pour le lire -> crash

n°568972
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 14:36:32  profilanswer
 

moktar1er a écrit :

chiffre par chiffre


sorry j'avais mal lu sa question :D
donc effectivement, je suis OK aussi ! vu qu'il n'y a qu'un chiffre, c'est argv[1][0], sinon c'est segmentation fault :jap:

n°568973
nraynaud
lol
Posté le 17-11-2003 à 14:39:00  profilanswer
 

Harkonnen a écrit :


 
ben argv[1][1] ne veut rien dire, puisque argv est un tableau de chaines de caractères ! en fait, argv[1][1] sera le 2eme caractère du 1er argument

argv[1][1] a toutes les chances de dénoter une connerie, sinon on ne se poserait pas la question (argv[1])[1] a déjà moins de chances de dénoter une connerie, bien que trouver un parsing des arguments et un accès au 2ème caractère du premier argument dans la même expression a toutes les chances de dénoter une connerie plantogène (vu que probablement personne n'a encore vérifié que la chaine avait 2 caractères, et que c'est surement pas le compilo qui va rattraper une connerie dans ce langage bugophile).


---------------
trainoo.com, c'est fini
n°568975
Moktar1er
No one replies...
Posté le 17-11-2003 à 14:41:03  profilanswer
 

nraynaud a écrit :

argv[1][1] a toutes les chances de dénoter une connerie, sinon on ne se poserait pas la question (argv[1])[1] a déjà moins de chances de dénoter une connerie, bien que trouver un parsing des arguments et un accès au 2ème caractère du premier argument dans la même expression a toutes les chances de dénoter une connerie plantogène (vu que probablement personne n'a encore vérifié que la chaine avait 2 caractères, et que c'est surement pas le compilo qui va rattraper une connerie dans ce langage bugophile).


 
ce n'est pas le langage qui est bugophile, mais le programmeur...
par contre je te suis dans ton idée quant à la vérification systématique et obligatoire du nombre d'arguments passés en paramètre et de leur taille.

n°571982
xWillow
Posté le 20-11-2003 à 20:44:14  profilanswer
 

non mais depuis quand vous passer un caractere a la fonction atoi qui demande un char* ? c'est normal que ca plante hein =)

n°571988
Taz
bisounours-codeur
Posté le 20-11-2003 à 20:50:07  profilanswer
 

%i est tout à fait valide :o
utilise sscanf :o
pour savoir si un char est un chiffre int isdigit(int) de <ctype.h>

n°572140
matafan
Posté le 21-11-2003 à 03:32:16  profilanswer
 

Y'a aussi strtoll qui permet de faire ça bien et détectant les erreurs. atoi c'est vraiment a éviter.

n°572150
urd-sama
waste of space
Posté le 21-11-2003 à 07:56:12  profilanswer
 

marrant ça, je viens de faire l'exercice en cours!
c'est bon à savoir qu'il y a une meilleure fonction que atoi, le jour ou on apprendra correctement en cours il va neiger des grenouilles?
et pour itoa, je suppose que c'est à éviter aussi?

n°572171
chrisbk
-
Posté le 21-11-2003 à 09:32:44  profilanswer
 

cf reponse de taz deux crans plus haut :
atoi => sscanf
itoa => s(n)printf

n°572172
urd-sama
waste of space
Posté le 21-11-2003 à 09:35:22  profilanswer
 

chrisbk a écrit :

cf reponse de taz deux crans plus haut :
atoi => sscanf
itoa => s(n)printf


:jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Help : atoi... ou la convertion de char en int.

 

Sujets relatifs
SQL plantage aléatoire ! SqlDumpExceptionHandler help plz !Manipulation de vidéo... (Help!)
Help !!! Excel et PHP/MySQL[VB] problème erreur HELP
[C] Comment passer un tableau de 2 char en un chiffre hexa[C/C++] passer d'un int a 4 char (representant le nombre)
[Fortran 90] Longueur de chaine dans un format... Help plz[borland c++] Petite erreur de compil svp help .......
string et char* ?Help, programmation en C du port parallele.
Plus de sujets relatifs à : Help : atoi... ou la convertion de char en int.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR