Потому что ... argv[]
не является постоянным.И это, безусловно, не является (статическим) строковым литералом, поскольку он создается во время выполнения.
Вы объявляете указатель char *
, а затем назначаете ему строковый литерал, который по определению является константой;фактические данные находятся в постоянной памяти.
int main(int argc, char **argv) {
// Yes, I know I'm not checking anything - just a demo
argv[1][0] = 'f';
std::cout << argv[1] << std::endl;
}
Ввод:
g ++ -o test test.cc
. / test hoo
Вывод:
foo
Это не комментарий к почему вы хотите изменить argv
,но это, конечно, возможно.