Accéder au élements de argv[]

Accéder au élements de argv[] - C - Programmation

Marsh Posté le 16-11-2003 à 18:24:41    

Bonjour,  
 
je suis entrain de me faire un petit programme en C, histoire de ne pas mourir idot, et j'ai un petit problème.
 
Pour mon programme, j'aimerais que l'utilisateur entre les paramètre en arguments :
 
c:\> prog.exe salut toi
 
Dans mon programme je sais que si je fais :
 

Code :
  1. for (i = 0; i < argc; i ++)
  2.  {
  3.  printf ("   %d : %s\n", i, argv [i]);
  4.  }


 
Alors il va me sortir
 

Code :
  1. salut
  2. toi


 
Maitenant j'aimerais accéder (et plus tard stocker) au éléments de argv[1] p.ex. afficher que le "a" de salut
Cad que j'aimerais pouvoir dire (mais c la que je comprends pas)
un truc du genre :
char a = "le ième élément de argv[1]".
 
Je vous remercie beaucoup

Reply

Marsh Posté le 16-11-2003 à 18:24:41   

Reply

Marsh Posté le 16-11-2003 à 18:28:15    

char a = argv[1][4];

Reply

Marsh Posté le 16-11-2003 à 22:15:52    

yes super merci !
 
J'ai juste une autre question.
Comment on converti un char en un int et inversement ?

Reply

Marsh Posté le 16-11-2003 à 22:43:34    

Un char unique en int : la correspondance est directe (au niveau valeur ASCII). Ca dépend du besoin ('A' vaut 65 décimal, 'a' 97).
Si c'est une chaîne de plusieurs chars, y a atoi() pour "extraire" la valeur int de la chaîne.
Pour faire une chaîne avec une valeur numérique, y a sprintf() entre autres moyens.

Reply

Marsh Posté le 16-11-2003 à 22:49:33    

strtoll c'est plus mieux que atoi, qui ne permet de détecter les erreurs de manière satisfaisante.

Reply

Marsh Posté le 16-11-2003 à 23:21:36    

Je me permets une autre questio parce que je suis trop motive là... c cool le C ;)
 
Voilà un bout de mon programme :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main (int argc, char * argv [])
  4. {
  5. int i,longueur_nombre1;
  6. longueur_nombre1=longueur_tableau(argv[1]);
  7. printf("Le nombre de chiffre du nombre 1 est %i\n", longueur_nombre1);
  8.     system("PAUSE" );
  9.     return 0;
  10. }
  11. int longueur_tableau (char nombre[])
  12.     {
  13.     int taille;
  14.     taille=sizeof(nombre);
  15.     return taille;
  16. }


 
Voila alors 2 questions :
1. c'est bien juste mon passage en paramètre ?
2. la fonction ne me retourne pas la bonne valeur (longueur du tableau de argv[1]), pourquoi ?
(elle retourne 4 quelque soit le contenu de argc[1]).

Reply

Marsh Posté le 16-11-2003 à 23:34:38    

arf, t'as encore une vision utopiste du C, genre un langage qui peu t connaitre la taille de ses tableau....
bin nan le C il sait pas ca, ton truc c'est tout faux. Bon, vu que ton argv[] c'est des chaines de caracteres utilise strlen() pour faire ce que tu veux

Reply

Marsh Posté le 16-11-2003 à 23:48:13    

chrisbk a écrit :

arf, t'as encore une vision utopiste du C, genre un langage qui peu t connaitre la taille de ses tableau....
bin nan le C il sait pas ca, ton truc c'est tout faux. Bon, vu que ton argv[] c'est des chaines de caracteres utilise strlen() pour faire ce que tu veux


 
ok ca marche avec ta solution...
Mais c'est possible de le faire avec une fonction comme je l'ai fais ?

Reply

Marsh Posté le 16-11-2003 à 23:53:35    

greeeg a écrit :


Code :
  1. int longueur_tableau (char nombre[])
  2.     {
  3.     int taille;
  4.     taille=sizeof(nombre);
  5.     return taille;
  6. }


 
Voila alors 2 questions :
1. c'est bien juste mon passage en paramètre ?
2. la fonction ne me retourne pas la bonne valeur (longueur du tableau de argv[1]), pourquoi ?
(elle retourne 4 quelque soit le contenu de argc[1]).


1. oui, tu vas bien récupérer la chaine en question dans ta fonction
2. Tu entres dans la partie obscure et buggante du C.
en faisant l'équivalent de sizeof(char []) tu mesures en fait la taille d'un pointeur (la taille du pointeur vers le premier élément du tableau). sizeof mesure en octets la place prise par un élément du type passé en paramètre. Toi tu voulais le nombre de cases du tableau passé en paramètre, chose impossible à mesurer en C. C'est pourquoi on utilise le fait que dans ton cas présent c'est en fait la longueur d'une chaine de caractères que tu veux, et il existe une fonction pour ça, strlen, mais à utiliser avec des précautions, car le système est très fragile :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main (int argc, char * argv [])
  5. {
  6.   int i,longueur_nombre1;
  7.   if (argc > 1) { // on vérifie que l'utilisateur a bien passé un argument
  8.     longueur_nombre1 = longueur_tableau(argv[1]);
  9.     printf("Le nombre de chiffre du nombre 1 est %i\n", longueur_nombre1);
  10.     system("PAUSE" ); 
  11.   }
  12.   return 0;
  13. }
  14. int longueur_tableau (char nombre[])
  15.    {
  16.    int taille;
  17.    taille = strlen(nombre);
  18.    return taille;
  19. }


 
Je ne rentre pas dans les détails des chaines de caratères, les autres réponses le feront probablement, mais c'est dans un bouquin qu'il faut regarder.


---------------
trainoo.com, c'est fini
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed