It seems that the argv[argc]
is always NULL
, so I think we can traverse the argument list without argc
. A single while
loop will do this.
If there is always a NULL
at the end of argv
, why do we need an argc
?
Yes, argv[argc]==NULL
is guaranteed. See C11 5.1.2.2.1 Program startup (my emphasis)
If they are declared, the parameters to the main function shall obey the following constraints:
The value of argc shall be nonnegative. argv[argc] shall be a null pointer.
Providing argc
therefore isn't vital but is still useful. Amongst other things, it allows for quick checking that the correct number of arguments has been passed.
Edit: The question has been amended to include C++. n3337 draft 3.6.1 Main function says
2 ...argc shall be the number of arguments passed to the program from the environment in which the program is run. .... The value of argc shall be non-negative. The value of argv[argc] shall be 0.