Задать вопрос
@avion123678

Массивы char в c++?

Почему выходит ошибка (error C2131) при использование в rev_list[n]?
#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

int main() {
    char list[] = "asdf";
    int n = sizeof(list);
    char rev_list[n];
    
    cout << rev_list;

    return 0;
}
  • Вопрос задан
  • 690 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
GavriKos
@GavriKos
Нельзя создавать массивы заранее неизвестной длины таким образом. У вас n должно быть константой. Либо используйте динамические массивы, а еще лучше - контейнеры из std
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Потому что в C++ нет variable length array
Ответ написан
Комментировать
BacCM
@BacCM
C++ почти с рождения
1. sizeof возвращает размер объекта, которым в данном случае является указатель, и у вас случайно совпало с длиной строки.
2. массив таким образом в C++ создавать нельзя. Как уже написали выше.

PS: можно конечно поизвращаться и написать константное вычисление строки на этапе компиляции.

Например наподобии
template <int L>
constexpr size_t cstrlen(const char (&s)[L])
{
	return L ? L - 1 : 0;
}


Или:

constexpr size_t cstrlen(const char* s)
{
	return *s ? 1 + cstrlen(s + 1) : 0;
}


Но в каких компиляторах такое может как-то не так выстрелить никто не скажет
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Почему выходит ошибка (error C2131) при использование в rev_list[n]?

Потому что n -- не константа.
Попробуй так, что ли:
#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

int main() {
    char list[] = "asdf";
    const int n = sizeof(list);
    char rev_list[n];
    
    cout << rev_list;

    return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы