Другие языки программирования и технологии

Как правильно задать одномерный массив в C++?

Почему когда я задаю массив так
int n

char a[n]

выдает ошибку?

или char a[] - тоже ошибка, хотя память должна выделяться автоматически

как норм задать массив типа char, чтобы размер можно было ввести с клавиатуры?
Понравился ответ Krab в ветке комментов.

Справедливости ради отмечу, что в плюсах для решения такой задачи целесообразнее использовать std::vector<char> a(nCaclulatedInRuntime);

Стандарт гарантирует, что &a[0] будет указывать на сплошную простыню памяти нужного размера, инициализированную нулями (для встроенных типов в векторе) . И еще и выровненную под любой тип данных, т. к. выделеление памяти внутри произойдет через operator new[] (по Стандарту) . Вот Вам пример, специально со всякими printf-ами и memcpy, чтоб нагляднее указатели выглядели:

#include <vector>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
vector<char> v(10);// inits v with 10 zero chars
memcpy(&v[0], "12345", 5);
printf("%s", &v[0]);
}
Петрашівіська Сільська Рада
Петрашівіська Сільська Рада
19 662
Лучший ответ
У тебя нет точек с запятой после операторов.
А размер массива с клавиатуры можно ввести тремя способами.
а) задать первоначально его с запасом: int n,a[1000]; cin>>n;
б) использовать вместо обычных массивов класс vector
б) некоторые компиляторы C++, позволяют использовать VLA массивы, имеющиеся в С, но далеко не все. int n; cin>>n; int a[n]; Это только если ты пишешь под конкретный rjvgbkynjh_ gjllthöbdf.obq МДФ *мфкшфиду дутпер фккфя (ю
И когда пишешь вопросы, пиши соответственно правилам русского языка. Я хоть и не компилятор, но всё равно читать без знаков препинания тяжелее.
Ara Ayvazyan
Ara Ayvazyan
89 604
Кайсар Искаков хорошо, но там одна запятая есть))
Если размер известен заранее - то так:
char a[100500];
Если размер заранее неизвестен - то так:
int n=100500;
char *a = new char [n];
Потому что int n не инициализирован, ты не задал ему значение.
char a[] для случаев, где возможно автоопределение размеров массива. Т. е. там где ты инициализируешь значение сразу.
char a[] = "some string..\n";
int b[] = { 1, 2, 3, 4, 5 };
Кайсар Искаков главной функцией чтоли? void main( )?