Is argv[argc] equal to NULL Pointer [duplicate]
Asked Answered
F

2

12

I read an article (forgot the URL), which said that argv[argc] is a NULL pointer (contains \0). To check whether if its true I wrote this code, yeah it exist. What I don't understand is, why does the OS include this NULL pointer at argv[argc]. Is it useful for something else also?

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

    while (*argv)
        printf ("%s\n", *argv++);

    return 0;
}
Fairground answered 7/5, 2013 at 12:21 Comment(1)
"argv[0] shall be the pointer to the initial character of a NTMBS that represents the name used to invoke the program or "". The value of argc shall be nonnegative. The value of argv[argc] shall be 0."Crotchety
S
11

The C Standard 5.1.2.2.1/2 second mark says explicitly

argv[argc] shall be a null pointer.

The C++ Standard 3.6.1/2 also says explicitly

The value of argv[argc] shall be 0.

Standley answered 7/5, 2013 at 12:26 Comment(12)
Yes, but what is the motivation for this?Crifasi
Why is the sky blue? It's a null terminated array of null terminated arrays of char. I'd guess consistency and to facilitate code like the OP wrote.Standley
See, you can do it. :-) Sounds like a good answer to me.Crifasi
As for your question about the colour of the sky: sciencemadesimple.com/sky_blue.htmlCrifasi
@Standley math.ucr.edu/home/baez/physics/General/BlueSky/blue_sky.html :DCrotchety
@MarounMaroun slowpoke :)Newsman
According to me such rules are really helpful in writing better efficient code. And I guess only this is the reason why they included it. Thank you everyone. Have a great day.Fairground
This is what happens when the question title does not reflect the question body. @Thilo: Also: why then is the sky not violet? Edit: I see the second link intelligently answers that one.Standley
@Standley 2 in 1: answers.yahoo.com/question/index?qid=20090208215127AAdL1E6 But the first link I provided answers this.Crotchety
physics.stackexchange.com/questions/28895/…Crifasi
Regarding blue sky: xkcd.com/1145Dipnoan
I'm going to have to find better rethorical questions.Standley
B
5

The Standard (C99 5.1.2.2.1p2) mandates that:

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.

...

The rationale for this is to provide a redundant check for the end of the argument list, on the basis of common practice (ref: Rationale for the ANSI C programming language (1990), 2.1.2.2).

Bocock answered 7/5, 2013 at 12:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.