Pass arguments into C program from command line Pass arguments into C program from command line c c

Pass arguments into C program from command line


You could use getopt.

 #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main (int argc, char **argv) {   int bflag = 0;   int sflag = 0;   int index;   int c;   opterr = 0;   while ((c = getopt (argc, argv, "bs")) != -1)     switch (c)       {       case 'b':         bflag = 1;         break;       case 's':         sflag = 1;         break;       case '?':         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 ("bflag = %d, sflag = %d\n", bflag, sflag);   for (index = optind; index < argc; index++)     printf ("Non-option argument %s\n", argv[index]);   return 0; }


In C, this is done using arguments passed to your main() function:

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

More information can be found online such as this Arguments to main article.


Consider using getopt_long(). It allows both short and long options in any combination.

#include <stdio.h>#include <stdlib.h>#include <getopt.h>/* Flag set by `--verbose'. */static int verbose_flag;intmain (int argc, char *argv[]){  while (1)    {      static struct option long_options[] =    {      /* This option set a flag. */      {"verbose", no_argument,       &verbose_flag, 1},      /* These options don't set a flag.         We distinguish them by their indices. */      {"blip",    no_argument,       0, 'b'},      {"slip",    no_argument,       0, 's'},      {0,         0,                 0,  0}    };      /* getopt_long stores the option index here. */      int option_index = 0;      int c = getopt_long (argc, argv, "bs",               long_options, &option_index);      /* Detect the end of the options. */      if (c == -1)    break;      switch (c)    {    case 0:      /* If this option set a flag, do nothing else now. */      if (long_options[option_index].flag != 0)        break;      printf ("option %s", long_options[option_index].name);      if (optarg)        printf (" with arg %s", optarg);      printf ("\n");      break;    case 'b':      puts ("option -b\n");      break;    case 's':      puts ("option -s\n");      break;    case '?':      /* getopt_long already printed an error message. */      break;    default:      abort ();    }    }  if (verbose_flag)    puts ("verbose flag is set");  /* Print any remaining command line arguments (not options). */  if (optind < argc)    {      printf ("non-option ARGV-elements: ");      while (optind < argc)    printf ("%s ", argv[optind++]);      putchar ('\n');    }  return 0;}

Related: