Why do we need argc while there is always a null at the end of argv?

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.

Leave a Comment