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

  FORUM HardWare.fr
  Programmation
  C

  Accéder au élements de argv[]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Accéder au élements de argv[]

n°568202
greeeg
Posté le 16-11-2003 à 18:24:41  profilanswer
 

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

mood
Publicité
Posté le 16-11-2003 à 18:24:41  profilanswer
 

n°568211
chrisbk
-
Posté le 16-11-2003 à 18:28:15  profilanswer
 

char a = argv[1][4];

n°568418
greeeg
Posté le 16-11-2003 à 22:15:52  profilanswer
 

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

n°568440
Carbon_14
Posté le 16-11-2003 à 22:43:34  profilanswer
 

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.

n°568448
matafan
Posté le 16-11-2003 à 22:49:33  profilanswer
 

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

n°568484
greeeg
Posté le 16-11-2003 à 23:21:36  profilanswer
 

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]).

n°568492
chrisbk
-
Posté le 16-11-2003 à 23:34:38  profilanswer
 

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

n°568498
greeeg
Posté le 16-11-2003 à 23:48:13  profilanswer
 

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 ?

n°568500
nraynaud
lol
Posté le 16-11-2003 à 23:53:35  profilanswer
 

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

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

  Accéder au élements de argv[]

 

Sujets relatifs
[WebContainer] Accéder à des fichiers à partir d'une webapp[CSS] Remplace un tableau d'éléments centrés par une liste
[SGBD]acceder au demon mysql de easyphp en ligne de commande?[PHP] Algo : trouver les éléments pas commun à deux tableaux
acceder a partir de VB a base de donnée en Access[ORACLE] récupérer les éléments X à Y d'une requete
[MySQL + PHP] Récupérer ne nb d'elements effacés par DELETE[Solution technique] Accéder à des fichiers distants
[Vb.Net/MySQL] Comment accéder à une base MySQL via une appli Vb.Net ?ARGV,ARGC, ENVP--->>>> big prob
Plus de sujets relatifs à : Accéder au élements de argv[]


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