comment prendre entiers comme des arguments de ligne de commande?

J'ai lu un getopt() exemple mais il ne montre pas comment accepter entiers en argument options, comme cvalue serait dans le code de l'exemple:

 #include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>

 int
 main (int argc, char **argv)
 {
   int aflag = 0;
   int bflag = 0;
   char *cvalue = NULL;
   int index;
   int c;

   opterr = 0;

   while ((c = getopt (argc, argv, "abc:")) != -1)
     switch (c)
       {
       case 'a':
         aflag = 1;
         break;
       case 'b':
         bflag = 1;
         break;
       case 'c':
         cvalue = optarg;
         break;
       case '?':
         if (optopt == 'c')
           fprintf (stderr, "Option -%c requires an argument.\n", optopt);
         else if (isprint (optopt))
           fprintf (stderr, "Unknown option `-%c'.\n", optopt);
         else
           fprintf (stderr,
                    "Unknown option character `\\x%x'.\n",
                    optopt);
         return 1;
       default:
         abort ();
       }

   printf ("aflag = %d, bflag = %d, cvalue = %s\n",
           aflag, bflag, cvalue);

   for (index = optind; index < argc; index++)
     printf ("Non-option argument %s\n", argv[index]);
   return 0;
 }

Si j'ai couru à la ci-dessus comme testop -c foo, cvalue serait foo, mais que si je voulais testop -c 42? Depuis cvalue est de type char *, pourrais-je les jeter optarg être (int)? J'ai essayé de faire cela sans l'aide de getopt() et l'accès argv[whatever] directement, et le jetant comme un entier, mais je finis toujours avec un grand nombre négatif lors de l'impression avec %d. Je suppose que je ne suis pas un déréférencement argv[] correctement ou quelque chose, pas sûr...

InformationsquelleAutor Andrew | 2011-01-25