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

前端 未结 8 2122
萌比男神i
萌比男神i 2020-11-21 05:18

In many C++ IDE\'s and compilers, when it generates the main function for you, it looks like this:

int main(int argc, char *argv[])

When I

相关标签:
8条回答
  • 2020-11-21 05:40

    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

    exit(main());
    

    and you don't 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 that's 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).
    0 讨论(0)
  • 2020-11-21 05:41

    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:
    ./test
    a1
    b2
    c3
    
    0 讨论(0)
  • 2020-11-21 05:41

    The parameters to main represent the command line parameters provided to the program when it was started. The argc parameter represents the number of command line arguments, and char *argv[] is an array of strings (character pointers) representing the individual arguments provided on the command line.

    0 讨论(0)
  • 2020-11-21 05:46
    int main();
    

    This is a simple declaration. It cannot take any command line arguments.

    int main(int argc, char* argv[]);
    

    This declaration is used when your program must take command-line arguments. When run like such:

    myprogram arg1 arg2 arg3
    

    argc, or Argument Count, will be set to 4 (four arguments), and argv, or Argument Vectors, will be populated with string pointers to "myprogram", "arg1", "arg2", and "arg3". The program invocation (myprogram) is included in the arguments!

    Alternatively, you could use:

    int main(int argc, char** argv);
    

    This is also valid.

    There is another parameter you can add:

    int main (int argc, char *argv[], char *envp[])
    

    The envp parameter also contains environment variables. Each entry follows this format:

    VARIABLENAME=VariableValue
    

    like this:

    SHELL=/bin/bash    
    

    The environment variables list is null-terminated.

    IMPORTANT: DO NOT use any argv or envp values directly in calls to system()! This is a huge security hole as malicious users could set environment variables to command-line commands and (potentially) cause massive damage. In general, just don't use system(). There is almost always a better solution implemented through C libraries.

    0 讨论(0)
  • 2020-11-21 05:48

    Both of

    int main(int argc, char *argv[]);
    int main();
    

    are legal definitions of the entry point for a C or C++ program. Stroustrup: C++ Style and Technique FAQ details some of the variations that are possible or legal for your main function.

    0 讨论(0)
  • 2020-11-21 05:51

    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
    }
    
    0 讨论(0)
提交回复
热议问题