ISO C says that:
"The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program, and retain their last-stored values between program startup and program termination."
Thus within the boundaries of defined ISO C, you can do this:
argv++; // argv pointer to array element modifiable
and you can do this: argv[0][0]++; // the string pointed to by the array is modifiable.
but not this: argv[0]++; // array itself (the pointers) not required to be modifiable
I seem to recall finding a problem like this in the K&R2 book also, probably close to thirty years ago. I don't have the book now, but the page number 117 seems to be coming up in my dim memory.