Comment getopt (3) fonctionne-t-il, et quelle est la variable ‘extern’ optarg?

J’essaie d’apprendre à accepter les arguments de ligne de commande et les données d’accompagnement qui suivent les indicateurs, c.-à-d.

myprogram -sampleflag datahere 

Mon code est ici jusqu’ici. getopt () jette des données dans une variable c , et apparemment, vous pouvez accéder à optarg en dehors de la fonction qui a été appelée. Comment est-ce possible? Selon la page de manuel, mon code devrait fonctionner! Cependant, comme vous pouvez le voir, la sortie est (null).

mon code:

 #include  #include  #include  #include  int main(int argc, char *argv[]) { opterr = 0; char* cvalue = NULL; int c; char* optarg = hello; while((c = getopt(argc, argv, "ps")) != -1){ switch(c){ case 'p': cvalue = optarg; printf("cvalue is : %s\n", cvalue ); break; } } } 

ma sortie: ($ myprogram -p test)

 cvalue is : (null) 

A partir du manuel :

Un caractère d’option dans cette chaîne peut être suivi de deux points («:») pour indiquer qu’il faut un argument requirejs.

Donc, dans votre cas, votre chaîne pour les options devrait être "p:s" plutôt que "ps" .