parseur d'options pour arguments en ligne de commande
Bonjour,
j'aimerait inserer dans un char * toute les options entrées par l'uilisateur du type ./nom_prog -a -abc en faisant un vérification au prealable.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
int get_nb_optargs(int argc, char **argv)
{
int i;
int nb_args;
i = 1;
nb_args = 0;
while (i < argc)
{
if (argv[i][0] == '-')
nb_args = nb_args + my_strlen(argv[i] + 1);
i = i + 1;
}
return (nb_args);
}
int check_opt(char *opt, char to_find)
{
int i;
int ret;
ret = 1;
i = 0;
while (opt[i] != '\0')
if (opt[i] == to_find)
ret = 0;
return (ret);
}
char *add_opt(char *opt, char to_add)
{
int i;
i = my_strlen(opt);
*(opt + i) = to_add;
*(opt + i + 1) = '\0';
return (opt);
}
char *get_optargs(int argc, char **argv)
{
int i;
int iargs;
int nb_args;
char *opt;
my_put_nbr(get_nb_optargs(argc, argv));
my_putchar('\n');
opt = malloc(50 * sizeof(char));
i = 1;
while (i < argc)
{
if (argv[i][0] == '-')
{
iargs = 1;
while (argv[i][iargs] != '\0')
{
printf("%c\n", argv[i][iargs]);
if (check_opt(opt, argv[i][iargs]))
{
opt[my_strlen(opt)] = argv[i][iargs];
opt[my_strlen(opt) + 1] = '\0';
}
printf("opt = %s \n", opt);
iargs = iargs + 1;
}
}
i = i + 1;
}
return (opt);
} |
ce que le programme m'affiche:
Code:
1 2 3 4 5 6 7
|
david@david-nux ~/Projets_C/my_ls $ ./a.out -opr -o -k -ll
nb_pathargs = 0
7
o
opt = o
p |
Apparament la boucle se stoppe pour une raison que je ne comprend pas.
Aurais-je commit une boulette?