Utilisation des arguments en C
Résolu
teteve
Messages postés
123
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour tout le monde,
Je me lance cette fois dans le langage C... Mais je butte, comme souvent au début dans mes apprentissages autodidactes. Je suis sous Débian, je compile grâce à gcc.
Après quelques lignes d'algorithmes, je commence par vouloir analyser les arguments quand je lance mon programme. J'affiche juste (pour tester ces premieres lignes) l'argument passé.
je le lance donc en faisant :
# ./prog1 [restart|start|stop]
<écris l'argument passé>
Mon code :
#include <stdio.h>
int main(int argc, char **argv){
char arg_restart[] = "restart";
char arg_start[] = "start";
char arg_stop[] = "stop";
if (argc != 2) puts("nombre d'argument incorrect"); else {
if (*argv[1] == *arg_restart) puts(argv[1]);
if (*argv[1] == *arg_start) puts(argv[1]);
if (*argv[1] == *arg_stop) puts(argv[1]);
}
return(0);
}
Ce code n'a, en soit aucun intérêt, je l'accorde (en plus il fonctionne mal :p). Mais ce n'est que le début d'un (j'espère) plus long programme.
Ce code est bien entendu pas du tout "au top" (sinon je ne serais pas là :)). Mais j'espère qu'il illustre bien ce que je souhaiterais. J'aimerais utiliser un switch/case, mais je ne sais pas trop comment faire.
Merci d'avance :)
Je me lance cette fois dans le langage C... Mais je butte, comme souvent au début dans mes apprentissages autodidactes. Je suis sous Débian, je compile grâce à gcc.
Après quelques lignes d'algorithmes, je commence par vouloir analyser les arguments quand je lance mon programme. J'affiche juste (pour tester ces premieres lignes) l'argument passé.
je le lance donc en faisant :
# ./prog1 [restart|start|stop]
<écris l'argument passé>
Mon code :
#include <stdio.h>
int main(int argc, char **argv){
char arg_restart[] = "restart";
char arg_start[] = "start";
char arg_stop[] = "stop";
if (argc != 2) puts("nombre d'argument incorrect"); else {
if (*argv[1] == *arg_restart) puts(argv[1]);
if (*argv[1] == *arg_start) puts(argv[1]);
if (*argv[1] == *arg_stop) puts(argv[1]);
}
return(0);
}
Ce code n'a, en soit aucun intérêt, je l'accorde (en plus il fonctionne mal :p). Mais ce n'est que le début d'un (j'espère) plus long programme.
Ce code est bien entendu pas du tout "au top" (sinon je ne serais pas là :)). Mais j'espère qu'il illustre bien ce que je souhaiterais. J'aimerais utiliser un switch/case, mais je ne sais pas trop comment faire.
Merci d'avance :)
A voir également:
- Utilisation des arguments en C
- Utilisation chromecast - Guide
- Télécharger gratuitement notice d'utilisation - Guide
- Dossier en cours d'utilisation - Forum Windows 8 / 8.1
- Imprimante en cours d'utilisation ✓ - Forum Matériel & Système
- Cliquez sur ce lien. en n'utilisant que le clavier, quel mot obtenez-vous ? ✓ - Forum souris / Touchpad
4 réponses
Salut,
Tu devrais utiliser la fonction strcmp qui renvoie 0 si les deux chaines passées en argument sont égales :
if (strcmp(argv[1],arg_restart) == 0) puts(arg_restart);
etc...
stcmp est une fonction de string.h (donc #include<string.h>)
Dans ce cas tu ne peux pas utiliser switch\case car ça ne marche qu'avec des entiers (ou équivalent).
En espérant avoir répondu a tes interrogations
A+
Tu devrais utiliser la fonction strcmp qui renvoie 0 si les deux chaines passées en argument sont égales :
if (strcmp(argv[1],arg_restart) == 0) puts(arg_restart);
etc...
stcmp est une fonction de string.h (donc #include<string.h>)
Dans ce cas tu ne peux pas utiliser switch\case car ça ne marche qu'avec des entiers (ou équivalent).
En espérant avoir répondu a tes interrogations
A+
Salut,
effectivement aucun intérêt
Si tu penses à créer une aplication avec des options penses plutôt à utliser
getopt
ou getopt_long (attention pour la portablité)
effectivement aucun intérêt
lami20j@debian:~$ cat teteve.c #include <stdio.h> #include<string.h> int main (int argc, char **argv) { char arg_restart[] = "restart"; char arg_start[] = "start"; char arg_stop[] = "stop"; if (argc != 2){ fprintf(stdout,"Usage : %s [restart|start|stop]\n",*argv); return -1; } if (strcmp(argv[1],arg_restart)==0) puts (argv[1]); if (strcmp(argv[1],arg_start)==0) puts (argv[1]); if (strcmp(argv[1],arg_stop)==0) puts (argv[1]); return (0); } lami20j@debian:~$ gcc teteve.c -o teteve lami20j@debian:~$ ./teteve Usage : ./teteve [restart|start|stop] lami20j@debian:~$ ./teteve start start lami20j@debian:~$ ./teteve restart restart lami20j@debian:~$ ./teteve stop stop lami20j@debian:~$ ./teteve sdfsdf lami20j@debian:~$Pour comparer 2 chaînes on utlises la fonction strcmp et pas l'opérateur ==
Si tu penses à créer une aplication avec des options penses plutôt à utliser
getopt
#include <unistd.h> int getopt(int argc, char * const argv[],const char *optstring); extern char * optarg; extern int optind, opterr, optopt;
ou getopt_long (attention pour la portablité)
#define _GNU_SOURCE #include <getopt.h> int getopt_long (int argc, char * const argv[],const char * optstring, const struct option * longopts, int * longindex);
Merci à vous deux,
Le projet est bien plus vaste que ce petit problème (création d'un gestionnaire de forum local sous Debian).
Ce code sert juste au lancement d'un processus père qui créera un démon grâce à un fork.
Je replonge dans mon bouquin pour explorer tout ça...
Sûrement à bientôt et bonne soirée :)
Le projet est bien plus vaste que ce petit problème (création d'un gestionnaire de forum local sous Debian).
Ce code sert juste au lancement d'un processus père qui créera un démon grâce à un fork.
Je replonge dans mon bouquin pour explorer tout ça...
Sûrement à bientôt et bonne soirée :)