записать в Struct массив char
- Войдите на сайт для отправки комментариев
Сб, 08/02/2020 - 11:00
Вот такой код, орёт error: array must be initialized with a brace-enclosed initializer на строке где я пытаюсь записать переменные в struckt чтобы потом записать в EEPROM , мучаюсь уже 4 дня #include <EEPROM.h> // Импортируем бмблиотеку int address = 0; // Переменная для хранения адреса struct myStruct { // Создаем пользовательскую структуру float sum; // 4 байта byte age; // 1 байт char fullname[15]; // 15 байт - итого 20 байт занимает объект в памяти }; void setup() { EEPROM.begin(70) ; Serial.begin(57600); float i = 110.20; byte i1 = 42; char i2[15] ; String name = "Ivanov Ivan" ; name.toCharArray( i2,15) ; for (int i = 0; i<15 ; i++){ Serial.println(i2[i]) ; } Serial.println() ; Serial.println(i2) ; myStruct persons = { // Создаем массив объектов пользовательской структуры i, i1, i2 }; // Записываем все данные в EEPROM EEPROM.put(address, persons); // Записываем значение переменной в EEPROM address += sizeof(myStruct); // Корректируем адрес следующей записи на объем записываемых данных // Теперь данные можно считать address = 0; myStruct person; // В переменную person будем считывать данные из EEPROM EEPROM.get(address, person); // Считываем данные из EEPROM в созданную переменную Serial.println("Чтение пользовательской структуры из EEPROM по адресу: " + String(address)); Serial.println( String(person.sum) + " " + String(person.age) + " " + String(person.fullname)); address += sizeof(myStruct); // Корректируем адрес следующей записи на объем записываемых данных } void loop() {}
Помучайтесь ещё недельку, а когда научитесь копипастить сообщения компилятора, или хотя бы указывать номера строк, тогда возвращайтесь.
Вот сейчас я всё брошу и начну искать в какой это такой строке Вы пытаетесь "записать переменные в struckt чтобы потом записать в EEPROM".
28
myStruct persons = {
// Создаем массив объектов пользовательской структуры
29
30
i,
31
i1,
32
i2
33
34
};
Переменная i2 это указатель на массив, а не его содержимое. Поэтому простым примитивным копированием его перенести в структуру не удастся. Структуру нужно объявить не инициализируя в ней массива, а потом скопировать туда массив поэлементно. А лучше сразу прямо записать без промежуточной переменной как сейчас происходит запись в i2.
Я же Вам сказал,
Вы по прежнему не удосужились скопировать сообщение полностью и не указали номер строки в скетче. Возвращайтесь, когда научитесь это делать! И не раньше!
Комрад. Я по образованию ни разу не технарь, я отдельно все слова что ты написал понял....но всё вместе....
дело в том, что я пишу набор опций которые пишуться в EEPROM из html интерфеса, то есть сначала читаем из eeprom struct, потом заменяем один член структуры тем что мы получили из html и снова записываем, для этого мне и нужен String.
вот полный недоработанный код
Тот маленький кусок я выдрал чтобы разбираться с проблеммой поэтапно. Но тут тоже есть корявый момент:
Человеки это существа обладающие неисчерпаемыми запасами лени, и веры божественную халяву. Что и отразилось в данной теме. Что бы решить эту проблему надо ТС освоить приличный объем знаний и временно наплевать на свою религию.
ПС: Пора забыть что написать структуру очень просто. Прежде всего структура это класс с пакетом конструкторов и деструкторов , а также перегрузкой операторов. И если это вам не понятно, читайте соответсующие учебники.
Можно обратица прямо к Руи Сантосу.
Тут есть, наконец-таки, номер строки!!! Как Вы этого не поймёте, что нельзя заставлять человека перерывать весь Ваш код, когда Вам известна строка!
Ваш пост противоречит вашему постулату своим существованием. Посоветуйте где почитать.
Посмотрите внимательнее -> :34: это номер строки
EEPROM_ARDUINO:34:3: error: array must be initialized with a brace-enclosed initializer
Вам ещё нужна помощь? Или уже разобрались? Если нужна, то по какому коду? Из стартового сообщения, или из #5
Если из второго, то что с ним не так (если Вы опять без номеров строк напишете, то просто уйду из темы).
Посмотрите внимательнее -> :34: это номер строки
EEPROM_ARDUINO:34:3: error: array must be initialized with a brace-enclosed initializer
В том-то и дело, что я смотрю внимательно. В стартовом коде строка №34 нормальная, а проблема в строке
32, а вовсе не 34!!!
Т.е. Вы тогда зачем-то показали один код, а сообщение из другого. Вам всё равно что откуда? Или просто поиздеваться решили?
Короче, проехали, впредь показывайте конкретный код и его сообщения, иначе посчитаю, что издеваетесь.
Давайте работать, помощь ещё нужна или разобрались?
spindle, почему неполную структуру написали???
Виноват. Я сам потихоньку с ним ковыряюсь, это одна и та же строка.
Так я и спрашиваю, где почитать нормально? Я даже не знал что стракт сам сеттеры создаёт =(
Я даже не знал что стракт сам сеттеры создаёт =(
кто вам такое сказал? - сеттеры надо создавать самому. И в первом коде как раз ошибка в том, что вы их не создали
И опять, направьте где почитать, чтобы доходчиво. С первым кодом разобрался. Беда со вторым
Сейчас он выглядит вот так
компилятор выдает следующее
где почитать - в учебнике по языку С
Ошибка в том, что у вас в структуре поля описаны как массивы, а ssidcc,passdcc,snamecc,adresscc,fscc - это все не массивы, а ссылки на них.
Вам уже выше написали - массивы простым присваиванием m[34] = d[34]; не копируются, необходимо присваивать каждый элемент массива посимвольно
Я разобрался! Рабочий, но не до конца дописанный (мне не нравится как происходит чтение из EEPROM) код выглядит так:
пост QWONE направил меня в нужную сторону. Всем большое спасибо, прошу не сердиться на меня.
Не совсем так но я пробовал, String не пишеться в EEPROM, поэтому я через цикл for и передал из стринга значения в char[], теперь заработало. Ваш пример разберу поглубже. Спасибо.
Я понимаю что в учебниках. У меня есть древний учебник по-моему Липтона. Там сам чёрт ногу сломит. Я поэтому и спрашиваю чего-то конкретного, доходчивого, а не давайте построим МКС, а на 500й страницу подробного описания механики работы ионных двигателей наконец перейдём к изучению работы ручной мясорубки.
Это всё не отменяет необходимости базовых знаний. В первой теме песочницы есть ссылки на литературу, которую знать обязательно (без неё просто нечего делать в программировании). В первую очередь - К&R (это ветхий завет - знать надо наизусть), и во вторую - Страуструп - это новый завет. Без этих знаний у Вас будут постоянно возникать проблемы на ровном месте.
Так что не отверчивайтесь, а учитесь.
А если учится дальше, то уже читать литературу от "протестантов" https://docs.microsoft.com/ru-ru/cpp/cpp/cpp-language-reference?view=vs-2019
Пух, это справочник. Чтобы его читать и понимать, базовые знания уже нужно иметь.
А для себя с закладку сделал, спасибо, этого справочника я ещё не видел.
Не надо читать кр, а следом страуструпа. В страуструпе 95% от кр повторено, а остальные 5 к арудино не применимы.
rkit, давайте Вы не будете писать глупости, ладно? Если это случайно вышло, я могу стереть тот Ваш пост (вместе с этим), скажите - сделаю.
Не надо читать кр, а следом страуструпа. В страуструпе 95% от кр повторено, а остальные 5 к арудино не применимы.