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
, поэтому в отсутствие конкретной формулировки наоборот мы должны предположить, что они являются изменяемыми объектами.