Кроме того, что все остальные указывали на константные строковые литералы, назначаемые неконстантным символьным указателям, и странность объявления argv и argc вне списка параметров main (), здесь есть дополнительная проблема с этой строкой:
char* argv[argc];
Вы можете использовать только целочисленные константные выражения для размеров массива в C ++;целочисленное константное выражение, являющееся буквальным целым числом в источнике вашей программы (например, "5" или "10"), значением перечисления (например, "red" из "enum colors {red, green, blue};"), sizeofexpression или переменная int, объявленная с помощью const:
// can hold 30 ints
int myarray1[30];
// can hold as many ints as myarray1 is wide in bytes
int myarray2[sizeof(myarray1)];
// C++ does not support variable-length arrays like C99 does, so if an int
// variable is used to specify array size, it must be marked const:
const int myarray3_size = 42;
int myarray3[myarray3];
Многие компиляторы C ++ реализуют массивы переменной длины в стиле C99, поэтому при их использовании вы можете не получить никаких жалоб, но их все же лучше избегать, еслиВы хотите написать переносимый код.