2010-09-24 14 views
1

Je veux utiliser mon programme comme celui-ci:Var liste arg dans la principale

./program -I /usr/include/ /usr/bin/ /usr/local/include/ ... 

Lorsque le commutateur peut aller et comme dans une liste var args. Comment pourrais-je faire ça en C99? De préférence obtenir un quelque chose comme char **args_list ou char *args_list[] qui contient toutes les choses comme /usr/include et /usr/bin/.

+5

Ne peut pas vous faire avec 'int main (int argc, char * argv [])' ? –

+0

Désolé, je suis très nouveau à C. –

+0

Pas de soucis. La réponse de @ linuxuser27 ci-dessous est ce dont vous avez besoin. –

Répondre

7

La sortie de l'exécution du code suivant:

int main(int argc, char* argv[]) 
{ 
    for (int i = 1; i < argc; ++i) 
    { 
     printf("%s\n", argv[i]); 
    } 
} 

Exécuté par program -I /usr/include/ /usr/bin/ /usr/local/include/

sortie:

-I 
/usr/include/ 
/usr/bin/ 
/usr/local/include/ 

On notera que dans l'exemple de code de l'indice initial est 1. Cela est dû au fait que le premier pointeur de la variable argv est le nom du programme. Dans ce cas, ce serait program.

+0

Merci pour la réponse, j'ai juste une autre question rapide. Vérifiez la mise à jour! –

0

Votre programme dans la mise à jour est segfaulting probablement parce que vous êtes en cours d'exécution au large de la fin du tableau:

printf("%s\n", argv[2]); 

il n'y a aucune garantie il y a une argv[2].

(Il peut être NULL si argc == 2, mais je pense pas que tous les printfs faire face à cela.)