Search code examples
cargv

Is it safe to use the argv pointer globally?


Is it safe to use the argv pointer globally? Or is there a circumstance where it may become invalid?

i.e: Is this code safe?

char **largs;
void function_1()
{
    printf("Argument 1: %s\r\n",largs[1]);
}
int main(int argc,char **argv)
{
    largs = argv;
    function_1();
    return 1;
}

Solution

  • Yes, it is safe to use argv globally; you can use it as you would use any char** in your program. The C99 standard even specifies this:

    The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program, and retain their last-stored values between program startup and program termination.

    The C++ standard does not have a similar paragraph, but the same is implicit with no rule to the contrary.

    Note that C++ and C are different languages and you should just choose one to ask your question about.