I am getting the following C++ error:
array must be initialized with a brace enclosed initializer
From this line of C++
int cipher[Array_size][Array_size] = 0;
What is the problem here? What does the error mean? Below is the full code:
string decryption(string todecrypt)
{
int cipher[Array_size][Array_size] = 0;
string ciphercode = todecrypt.substr(0,3);
todecrypt.erase(0,3);
decodecipher(ciphercode,cipher);
string decrypted = "";
while(todecrypt.length()>0)
{
string unit_decrypt = todecrypt.substr(0,Array_size);
todecrypt.erase(0,Array_size);
int tomultiply[Array_size]=0;
for(int i = 0; i < Array_size; i++)
{
tomultiply[i] = int(unit_encrypt.substr(0,1));
unit_encrypt.erase(0,1);
}
for(int i = 0; i < Array_size; i++)
{
int resultchar = 0;
for(int j = 0; j<Array_size; j++)
{
resultchar += tomultiply[j]*cipher[i][j];
}
decrypted += char((resultchar%229)-26);
}
}
return decrypted;
}
asked Dec 1, 2010 at 21:27
The syntax to statically initialize an array uses curly braces, like this:
int array[10] = { 0 };
This will zero-initialize the array.
For multi-dimensional arrays, you need nested curly braces, like this:
int cipher[Array_size][Array_size]= { { 0 } };
Note that Array_size
must be a compile-time constant for this to work. If Array_size
is not known at compile-time, you must use dynamic initialization. (Preferably, an std::vector
).
answered Dec 1, 2010 at 21:30
Charles SalviaCharles Salvia
51.7k12 gold badges127 silver badges140 bronze badges
2
You cannot initialize an array to ‘0’ like that
int cipher[Array_size][Array_size]=0;
You can either initialize all the values in the array as you declare it like this:
// When using different values
int a[3] = {10,20,30};
// When using the same value for all members
int a[3] = {0};
// When using same value for all members in a 2D array
int a[Array_size][Array_size] = { { 0 } };
Or you need to initialize the values after declaration. If you want to initialize all values to 0 for example, you could do something like:
for (int i = 0; i < Array_size; i++ ) {
a[i] = 0;
}
answered Dec 1, 2010 at 21:34
MahlerFiveMahlerFive
5,1095 gold badges30 silver badges40 bronze badges
1
You can’t initialize arrays like this:
int cipher[Array_size][Array_size]=0;
The syntax for 2D arrays is:
int cipher[Array_size][Array_size]={{0}};
Note the curly braces on the right hand side of the initialization statement.
for 1D arrays:
int tomultiply[Array_size]={0};
answered Dec 1, 2010 at 21:30
Nathan FellmanNathan Fellman
120k99 gold badges256 silver badges319 bronze badges
- Forum
- Beginners
- Array must be initialized with a brace-e
Array must be initialized with a brace-enclosed initializer
Hello everyone,
I have a string «path» that I’m trying to assign to the variable «src». But when I try to do this, I get the error «Array must be initialized with a brace-enclosed initializer». Can someone tell me what I have to do? How can I convert a string into a char* ?
|
|
Best regards
theRunner
First, you declared an array of pointers to chars. You just want an array of chars, so you can get rid of the asterisk. Apart from that, there is no implicit conversion from std::string to char*, though there is the other way round (due to its constructors and assignment operators). Basically, you need to specify that you want to convert the std::string into a char*. For this, the best way (and the most common way) is to use the c_str() member function, which returns the underlying char* from the string:
|
|
Why do you need it as an array of char anyway?
Thanks for your replies.
@NT3:
When I try your solution, there is still the same error message: «Array must be initialized with a brace-enclosed initializer»
@RabMac:
When I try your solution, there is an other error message: «Cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘char*’ in initialization»
I need the string as an array of char because the function I want to call needs an array of char.
It works now. I made:
I don’t know what I just did with this line (copied it from the internet), but it works. To be honest, I don’t have the least idea what I am doing here.
But it seems to work.
Topic archived. No new replies allowed.
ratatyq 3 / 3 / 1 Регистрация: 16.09.2015 Сообщений: 121 |
||||||||
1 |
||||||||
21.01.2016, 16:56. Показов 18748. Ответов 3 Метки нет (Все метки)
Вот собственно сама ошибка: «array must be initialized with a brace-enclosed initializer»
draw.cpp
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
21.01.2016, 16:56 |
3 |
Croessmah Don’t worry, be happy 17781 / 10545 / 2036 Регистрация: 27.09.2012 Сообщений: 26,516 Записей в блоге: 1 |
||||
21.01.2016, 17:12 |
2 |
|||
1 |
3 / 3 / 1 Регистрация: 16.09.2015 Сообщений: 121 |
|
21.01.2016, 17:56 [ТС] |
3 |
Croessmah, Спасибо помогло, вот только не пойму если мы сделали 4-ех значный массив то почему мы указали всего две скобки([][]) заместо четырех([][][][])?
0 |
0 / 0 / 0 Регистрация: 29.03.2019 Сообщений: 1 |
|
30.03.2019, 10:35 |
4 |
Массив двухзначный так-то был изначально
0 |
3 ответа
Синтаксис статической инициализации массива использует фигурные скобки, например:
int array[10] = { 0 };
Это будет инициализировать нулевой массив.
Для многомерных массивов вам нужны вложенные фигурные скобки, например:
int cipher[Array_size][Array_size]= { { 0 } };
Обратите внимание, что Array_size
должна быть константой времени компиляции, чтобы это работало. Если Array_size
не известно во время компиляции, вы должны использовать динамическую инициализацию. (Предпочтительно, std::vector
).
Charles Salvia
01 дек. 2010, в 21:58
Поделиться
Вы не можете инициализировать массив до ‘0’, как это
int cipher[Array_size][Array_size]=0;
Вы можете либо инициализировать все значения в массиве, как вы его объявляете так:
// When using different values
int a[3] = {10,20,30};
// When using the same value for all members
int a[3] = {0};
// When using same value for all members in a 2D array
int a[Array_size][Array_size] = { { 0 } };
Или вам нужно инициализировать значения после объявления. Если вы хотите, например, инициализировать все значения до 0, вы можете сделать что-то вроде:
for (int i = 0; i < Array_size; i++ ) {
a[i] = 0;
}
MahlerFive
01 дек. 2010, в 21:41
Поделиться
Вы не можете инициализировать массивы следующим образом:
int cipher[Array_size][Array_size]=0;
Синтаксис для 2D-массивов:
int cipher[Array_size][Array_size]={{0}};
Обратите внимание на фигурные скобки в правой части инструкции инициализации.
для 1D массивов:
int tomultiply[Array_size]={0};
Nathan Fellman
01 дек. 2010, в 21:42
Поделиться
Ещё вопросы
- 0Как удалить элементы и массив по двум атрибутам в AngularJS?
- 0Как вы загружаете один файл одновременно?
- 1Android — устройства-слайдеры вызывают сброс действий
- 0setInterval с различной длительностью
- 1Java и Hadoop: несовместимые типы с TextInputFormat
- 0C ++ сортирует массив в порядке убывания, используя отдельную функцию [closed]
- 0Высота красно-черного дерева с использованием рекурсии
- 1Скрипт Google Apps для повторного выполнения функции с помощью триггера
- 1Как получить системный десятичный разделитель с помощью JavaScript в Google Chrome?
- 1Как вызвать функцию jJavascript из кода после нажатия кнопки в asp net C #?
- 0NWMLS IDX PHP скрипт?
- 1Импорт сверхлегкой модели XNA (число поли)
- 0Как добавить класс к элементу на основе ввода формы?
- 0Как получить текст из одного из элементов span внутри другого элемента span?
- 1Застрял на регулярное выражение в C #
- 1Как приложение Контакты на Android?
- 0ASP логин не отправляется
- 1Несколько Асинхронных / Ожидать Блокировка Try-Catch
- 1API ‘SymEnumSymbols’ получает только первую букву имени каждого метода
- 0«Ионная прокрутка» — невозможна вертикальная прокрутка
- 0Разборный <div> клик по ссылке
- 0Mysql запрос IF оператор не работает правильно
- 1Получение представления даты в секундах в Java
- 0SQL — Как запросить несколько таблиц через ссылку ./ ассоциативная таблица
- 0JQuery и JS работает на DOM, а не onLoad
- 0Цепочка подзапросов SQL в большом запросе JOINS
- 0Как предотвратить расширение строки таблицы CSS до родительской высоты
- 1Moment.js Неверное сообщение о дате
- 0Мои div-блоки inline-блока не выровнены на FF и Chrome, но на Safari
- 0MySQL находит даты более 1 недели с сегодняшнего дня
- 1Алфавитная сортировка массива синхронно с другим массивом
- 1GeoServer — DWITHIN неправильно фильтрует точки
- 1Групповой запрос с использованием mongoose 4.11.0
- 0Убедитесь, что длинная строка загружена в справочную базу
- 1jsPlumb — отрисовка нескольких соединений с использованием одной конечной точки для источника и цели
- 0Bootstrap 3 Упрощенная головоломка
- 0простой скрипт Jquery не работает: /
- 0как хранить кратные записи с некоторыми ограничениями?
- 1Проблема с установкой discord.py 1.0
- 1Есть ли сопоставимый не сопоставимый с самим собой?
- 0Как мы можем определить, когда модель вернулась к своему первоначальному значению?
- 0jquery: могу ли я динамически изменять href ссылки при наведении курсора?
- 0Как получить параметры в URL после последнего появления определенного символа
- 1Android новички
- 0SET NAMES ‘charset_name’ [COLLATE ‘collation_name’] в командной строке mysql
- 0Не удается загрузить данные для нового добавления выпадающего
- 0Наведите курсор на один элемент div, измените цвет другого, но затемните все элементы div, которые не отображаются
- 0PHP — Как использовать переменную суммы внутри цикла
- 0JQuery не может заставить работать
Posted By: user520621
I am getting the following C++ error:
array must be initialized with a brace enclosed initializer
From this line of C++
int cipher[Array_size][Array_size] = 0;
What is the problem here? What does the error mean? Below is the full code:
string decryption(string todecrypt)
{
int cipher[Array_size][Array_size] = 0;
string ciphercode = todecrypt.substr(0,3);
todecrypt.erase(0,3);
decodecipher(ciphercode,cipher);
string decrypted = "";
while(todecrypt.length()>0)
{
string unit_decrypt = todecrypt.substr(0,Array_size);
todecrypt.erase(0,Array_size);
int tomultiply[Array_size]=0;
for(int i = 0; i < Array_size; i++)
{
tomultiply[i] = int(unit_encrypt.substr(0,1));
unit_encrypt.erase(0,1);
}
for(int i = 0; i < Array_size; i++)
{
int resultchar = 0;
for(int j = 0; j<Array_size; j++)
{
resultchar += tomultiply[j]*cipher[i][j];
}
decrypted += char((resultchar%229)-26);
}
}
return decrypted;
}
Solution
The syntax to statically initialize an array uses curly braces, like this:
int array[10] = { 0 };
This will zero-initialize the array.
For multi-dimensional arrays, you need nested curly braces, like this:
int cipher[Array_size][Array_size]= { { 0 } };
Note that Array_size
must be a compile-time constant for this to work. If Array_size
is not known at compile-time, you must use dynamic initialization. (Preferably, an std::vector
).
Answered By: Anonymous
Related Articles
- Java SSLHandshakeException «no cipher suites in common»
- easiest way to extract Oracle form xml format data
- Why do I get «Exception; must be caught or declared to be…
- Java 256-bit AES Password-Based Encryption
- Initial bytes incorrect after Java AES/CBC decryption
- How to fix Invalid AES key length?
- How do I use 3DES encryption/decryption in Java?
- How to encrypt/decrypt data in php?
- Java AES and using my own Key
- Password encryption/decryption code in .NET
Disclaimer: This content is shared under creative common license cc-by-sa 3.0. It is generated from StackExchange Website Network.
Форум программистов Vingrad
Модераторы: bsa |
Поиск: |
|
масив указателей, ошибка при инициализации масив указателе |
Опции темы |
grisWall |
|
||||||||||
Новичок Профиль Репутация: нет
|
Всем доброго времени суток у меня проблема не могу в С++ инициализировать массив указателей т.е. могу, но вот именно этим способом не получается, кто подскажет что я делаю не так и вообще возможно ли такое:
в консоли ввожу: на выводе ошибка
ввожу: $ g++ test.cpp -o test выдает: test.cpp:6:30: предупреждение: deprecated conversion from string constant to «char*» [-Wwrite-strings]
ввожу: $ g++ test.cpp -o test выдает: test.cpp: В функции «int main()»: везде в примерах видел и в книгах и на форуме что такое возможно, а у меня не получается может кто сталкивался с таким или знает как это решается у меня система Archlinux недавно делал update совсем на днях почти у меня еще много чего не понятного в С++ встречается что например в Си работает и связанно это с указателями и переменными а так же массивами, просто дальше я еще не продвинулся так сказать изучаю поступательно по мере понимания, владения; то чего не знаю пытаюсь изучить, но если даже это не работает, что уж говорить о перегрузке и классах там я вообще захлебнусь мне кажется…или потеряюсь где нибудь так что вообще не выберусь…. страшновато становится..
$ gcc test.c -o test
Ввожу: $ gcc test.cpp -o test на выходе: test.cpp: В функции «int main()»: Если кто ответит заранее благодарю за помощь… |
||||||||||
|
|||||||||||
math64 |
|
||||
Эксперт Профиль Репутация: 12
|
строка в кавычках — это const char*. Следовательно,
или, если нужно без const:
static в зависимости от использования можно не писать. |
||||
|
|||||
NoviceF |
|
||||
Опытный Профиль
Репутация: 2
|
ну и так, на всякий случай, ты же видишь, что у данного массива получает только 1 элемент, то есть, если нужно сделать массив из нескольких указателей указывающих на строки, должно быть что-то типа
|
||||
|
|||||
grisWall |
|
||||
Новичок Профиль Репутация: нет
|
а еще смежный вопрос такой
все компилирует вроде бы но при вызове
выдает ошибку сегментирования |
||||
|
|||||
volatile |
|
||
Эксперт Профиль Репутация: 16
|
grisWall, вы меня извините конечно, но вам нужно читать учебник для самых начинающих. |
||
|
|||
grisWall |
|
||||||
Новичок Профиль Репутация: нет
|
пусть плохой пример никчемный, но мне понять саму семантику указателей, как они работают через такие вот ошибки а вообще в Си / С++ можно ли передавать массив из функции
а потом в main обращаться к нему
или такое возбраняется может из-за этого у меня ошибка сегментации? Добавлено @ 23:44
а какой учебник вы посоветуете? я читал у меня два один для чайников С++ за 21 день, а другой С/С++ программироние на языке высокого уровня Т.А.Павловской там таких подробностей не описано про указатели там написано как они работают в общих чертах а я пишу не в общих чертах а так как мне нужно чтоб это работало или конечно я смотрю и пограничные случаи что бы знать куда можно идти а куда нельзя….если можете что посоветовать с удовольствием выслушаю ( т.е. сочту)… Это сообщение отредактировал(а) grisWall — 29.4.2013, 23:51 |
||||||
|
|||||||
volatile |
|
||||
Эксперт Профиль Репутация: 16
|
сам массив вообще нельзя ни передать, ни вернуть.
так делать нельзя. int * mas[] = {1,2,40,21}; // а это, кстати, вообще не имеет смысла. массив указателей на инт, вы заполняете не указателями на инт, а неизвестно чем. grisWall, вам нужно для начала понять что такое массив, что такое указатель, и что такое инт. |
||||
|
|||||
grisWall |
|
||||
Новичок Профиль Репутация: нет
|
да спасибо за совет я откомпилировал и увидел что вместо int* я занес int в int *mas[] теперь я понял и так делать не буду в учебниках этого не пишут там не пишут чего нельзя делать там лишь только то что можно а чего нельзя понимаешь из примеров но порой не достаточно откомпилировать нужно чтоб еще кто-то тебе сказал что это не получается поэтому а это потому что так-то так-то и так-то и тогда появляется знание, когда наделаешь кучу ошибок, строка в кавычках это const char* например я этого не знал теперь буду знать,
работает, а в С++ нет! надо выражение в скобках обязательно в const char* заносить volatile, а как же мне в int * mas[] занести данные не подскажите? Это сообщение отредактировал(а) grisWall — 30.4.2013, 02:07 |
||||
|
|||||
math64 |
|
||||
Эксперт Профиль Репутация: 12
|
Аналогично, как я вам показывал для строк:
static чтобы переменные создавались не на стеке. Если нужно запонять не фиксированными значениями, нужно выделять память по new:
Это сообщение отредактировал(а) math64 — 30.4.2013, 07:15 |
||||
|
|||||
grisWall |
|
||
Новичок Профиль Репутация: нет
|
math64, спасибо теперь я понял |
||
|
|||
|
Правила форума «C/C++: Для новичков» | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |