Приведенный вами пример пытается построить массив в стеке.
const char pArray[x];
Однако вы не можете динамически создавать объекты в стеке. Эти типы элементов должны быть известны во время компиляции. Если это переменная, основанная на пользовательском вводе, вы должны создать массив в динамической памяти с помощью ключевого слова new.
const char* pArray = new char[x];
Однако не все элементы нужно создавать в куче. Выделение кучи обычно происходит намного медленнее, чем выделение стека. Если вы хотите сохранить свой массив в стеке, вы всегда можете использовать инициализацию на основе блоков.
#define MAX_ITEMS 100
const char pArray[MAX_ITEMS]
Следует отметить, что второй вариант является расточительным. Поскольку вы не можете динамически изменять размер этого массива, вы должны выделить достаточно большой кусок, чтобы вместить максимальное количество элементов, которые может создать ваша программа.
Наконец, вы всегда можете использовать структуры данных, предоставляемые C++. std::vector является таким классом. Он обеспечивает хороший уровень абстракции, а элементы хранятся в условной памяти, например в массиве. Как отмечено в одном из других ответов, вы должны использовать параметр изменения размера, как только узнаете окончательный размер вашего вектора.
std::vector<char> pArray;
pArray.resize(X);
Причина этого в том, что каждый раз, когда вы добавляете элемент в вектор, если у него больше нет места для роста, он должен перемещать все элементы, чтобы они могли существовать рядом друг с другом. Использование метода изменения размера помогает предотвратить увеличение вектора при добавлении элементов.
person
Freddy
schedule
16.03.2014
std::vector
вместо этого? - person cf stands with Monica   schedule 16.03.2014