Handling argc==0 in the kernel
Handling argc==0 in the kernel
Posted Jan 30, 2022 3:24 UTC (Sun) by nybble41 (subscriber, #55106)In reply to: Handling argc==0 in the kernel by matthias
Parent article: Handling argc==0 in the kernel
Another comment by areilly hinted at this already, but evaluating argv[1] for an argv array of size 1 (where argc == 0) is not undefined behavior. You are allowed to construct (but not dereference) a pointer to the element immediately after the end of an array. (Taking the address of a dereference or array indexing expression does not count as actually dereferencing the pointer: even though argv[1] in an expression by itself would be UB, &argv[1] and &*(argv + 1) are both semantically identical to the pointer arithmetic operation argv + 1. The address-of operator "cancels out" the dereference.) So there is no undefined behavior in the example, even if argc == 0, as &argv[1] and &argv[0] are both valid pointers.
