C11 5.1.2.2.1/2 говорит:
Параметры
argcиargv, а строки, на которые указывает массивargv, должны могут быть модифицированы программой и сохраняют свои последние сохраненные значения между программой запуск и завершение программы.
Моя интерпретация этого заключается в том, что она указывает:
int main(int argc, char **argv)
{
if ( argv[0][0] )
argv[0][0] = 'x'; // OK
char *q;
argv = &q; // OK
}
однако он ничего не говорит о:
int main(int argc, char **argv)
{
char buf[20];
argv[0] = buf;
}
Разрешен ли argv[0] = buf;?
Я вижу (по крайней мере) два возможных аргумента:
- Вышеприведенная цитата преднамеренно упомянула
argvиargv[x][y], но неargv[x], поэтому было намерено, что она не модифицируется -
argv- это указатель на объекты неconst, поэтому в отсутствие конкретной формулировки наоборот мы должны предположить, что они являются изменяемыми объектами.