Использование argv [] в компиляторе CC для переполнения стека

В компиляторе g ++ моя программа работает отлично, однако в компиляторе CC я получаю сообщение об ошибке.

Следующая строка: Shape s[atoi(argv[1])]; выдает ошибку:
ошибка: целочисленное константное выражение требуется в операторе индексации массива.

Затем я попытался изменить его на: int i = atoi(argv[1]); с последующим Shape s[i];, но я все еще получаю ту же ошибку.

Мне нужен argv [1], потому что он получает из командной строки, сколько фигур нужно сделать.
например ./программа 10
Должно сделать Team s[10];

Как мне заставить argv [] работать с компилятором CC?

0

Решение

Для массивов указанный размер должен быть постоянным. Итак, пока вы можете сделать это:

Team s[10];

Ты не сможешь это сделать:

int size = 10;
Team s[size];

Вместо этого вы должны сделать это:

int size = 10;
Team* s = new Team[size];
// do stuff
delete[] s;
1

Другие решения

Команда с [10];

создаст массив в стеке, но это возможно, только если размер является константным выражением. Если вы хотите динамический массив, то вы должны создать массив динамически с вызовом new[]

int size = atoi( argv[1]);
Team* s = new Team[ size];

предпочитать std::vector<Team> tv(size); это облегчит управление памятью (и, в конце концов, рано или поздно вам придется изучать библиотеку STL, начните сегодня).

2

В стандартном C ++ размер массива должен быть константой времени компиляции. GCC допускает использование массивов переменной длины как нестандартного расширения; другие компиляторы этого не делают.

Для этого вам понадобится динамически распределенный массив:

#include <memory>

std::vector<Shape> s(atoi(argv[1]));
1