c++ – What does int argc, char *argv[] mean?

c++ – What does int argc, char *argv[] mean?

argv and argc are how command line arguments are passed to main() in C and C++.

argc will be the number of strings pointed to by argv. This will (in practice) be 1 plus the number of arguments, as virtually all implementations will prepend the name of the program to the array.

The variables are named argc (argument count) and argv (argument vector) by convention, but they can be given any valid identifier: int main(int num_args, char** arg_strings) is equally valid.

They can also be omitted entirely, yielding int main(), if you do not intend to process command line arguments.

Try the following program:

#include <iostream>

int main(int argc, char** argv) {
    std::cout << Have  << argc <<  arguments: << std::endl;
    for (int i = 0; i < argc; ++i) {
        std::cout << argv[i] << std::endl;

Running it with ./test a1 b2 c3 will output

Have 4 arguments:

argc is the number of arguments being passed into your program from the command line and argv is the array of arguments.

You can loop through the arguments knowing the number of them like:

for(int i = 0; i < argc; i++)
    // argv[i] is the argument at index i

c++ – What does int argc, char *argv[] mean?

Suppose you run your program thus (using sh syntax):

myprog arg1 arg2 arg 3

If you declared your main as int main(int argc, char *argv[]), then (in most environments), your main() will be called as if like:

p = { myprog, arg1, arg2, arg 3, NULL };
exit(main(4, p));

However, if you declared your main as int main(), it will be called something like


and you dont get the arguments passed.

Two additional things to note:

  1. These are the only two standard-mandated signatures for main. If a particular platform accepts extra arguments or a different return type, then thats an extension and should not be relied upon in a portable program.
  2. *argv[] and **argv are exactly equivalent, so you can write int main(int argc, char *argv[]) as int main(int argc, char **argv).

Leave a Reply

Your email address will not be published. Required fields are marked *