Help : atoi... ou la convertion de char en int. - C - Programmation
Marsh Posté le 17-11-2003 à 13:31:13
%i ? C'est nouveau ?
bon sinon c'est du grand n'importe quoi ton truc machin
Marsh Posté le 17-11-2003 à 13:58:59
c'est quoi ça ?
Code :
|
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...
Marsh Posté le 17-11-2003 à 14:17:11
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!!!
Marsh Posté le 17-11-2003 à 14:25:30
moktar1er a écrit : si 1 chiffre par case alors argv[1][0]:1er chiffre, argv[1][1]:2eme chiffre etc. |
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... )
Marsh Posté le 17-11-2003 à 14:27:19
Harkonnen 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"
Marsh Posté le 17-11-2003 à 14:29:16
Harkonnen a écrit : |
ç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).
Marsh Posté le 17-11-2003 à 14:30:51
moktar1er 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
Marsh Posté le 17-11-2003 à 14:31:43
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 !
Marsh Posté le 17-11-2003 à 14:33:27
Harkonnen a écrit : |
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
Marsh Posté le 17-11-2003 à 14:36:32
moktar1er a écrit : chiffre par chiffre |
sorry j'avais mal lu sa question
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
Marsh Posté le 17-11-2003 à 14:39:00
Harkonnen 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).
Marsh Posté le 17-11-2003 à 14:41:03
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.
Marsh Posté le 20-11-2003 à 20:44:14
non mais depuis quand vous passer un caractere a la fonction atoi qui demande un char* ? c'est normal que ca plante hein =)
Marsh Posté le 20-11-2003 à 20:50:07
%i est tout à fait valide
utilise sscanf
pour savoir si un char est un chiffre int isdigit(int) de <ctype.h>
Marsh Posté le 21-11-2003 à 03:32:16
Y'a aussi strtoll qui permet de faire ça bien et détectant les erreurs. atoi c'est vraiment a éviter.
Marsh Posté le 21-11-2003 à 07:56:12
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?
Marsh Posté le 21-11-2003 à 09:32:44
cf reponse de taz deux crans plus haut :
atoi => sscanf
itoa => s(n)printf
Marsh Posté le 21-11-2003 à 09:35:22
Reply
Marsh Posté le 17-11-2003 à 13:27:27
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 :
Or le programme plante...
HELP