Are char * argv[] arguments in main null terminated?

argv, c, null-terminated

Solution

Yes. The non-null pointers in the `argv` array point to C strings, which are by definition null terminated.

The C Language Standard simply states that the array members "shall contain pointers to strings" (C99 §5.1.2.2.1/2). A string is "a contiguous sequence of characters terminated by and including the first null character" (C99 §7.1.1/1), that is, they are null terminated by definition.

Further, the array element at `argv[argc]` is a null pointer, so the array itself is also, in a sense, "null terminated."

Problem

I'm wondering if command line parameters are always null terminated. Google seems to say yes, and compiling on GCC indicates this is the case, but can I guarantee this to always be true? ``` int main(int argc, char** argv) { char *p; for(int cnt=1; cnt < argc; ++cnt) { p = argv[cnt]; printf("%d = [%s]\n", cnt, p); } return 0; } $ MyProgram -arg1 -arg2 -arg3 1 = -arg1 2 = -arg2 3 = -arg3 ```

Original source