динамический массив char#include <EEPROM2.h>
- Войдите на сайт для отправки комментариев
Чт, 12/01/2017 - 17:20
Такой код антинаучен?
#include <EEPROM2.h>
char prtIn[] ={"12345"};
void Print (byte size, int adress) {
char *prt = new char[size];
EEPROM_read(adress, prt);
Serial.print(prt);
delete [] prt;
}
void setup() {
Serial.begin(9600);
EEPROM_write(0,prtIn);
Print (6, 0);
}
void loop() {
}
Код не бывает антинаучным.
У Алескандра Зиновьева в "Зияющих высотах", герои как-то стали обсуждать, что некий текст признан "антиибанским". На что Болтун логически доказал, что антиибанских текстов не бывает и в принципе быть не может. Если интересно, можете ознакомиться с доказательством (поищите там по названию главы "Право и истолкование")
Так что код совсем не антинаучен.
Вы не написали что он, по-Вашему делает. Если Вы хотели записать туда 12345, а потом прочитать это оттуда, то таки нет. Данный код делает совсем не это :)
Код не бывает антинаучным.
У Алескандра Зиновьева в "Зияющих высотах", герои как-то стали обсуждать, что некий текст признан "антиибанским". На что Болтун логически доказал, что антиибанских текстов не бывает и в принципе быть не может. Если интересно, может ознакомиться с доказательством (поищите по названию главы "Право и истолкование")
Обязательно прочту, на первый взгляд круто.
А что посоветуете по поводу скетча? Задача - писать из еепрома разные строки разной длинны в массив желательно с помощью функции. Я это делаю сейчас в лупе, объявляя массив нужного размера, потом пишу в него из еепром массив char, потом печатаю массив. Работает, только много одинакового кода (различие только в длинне строки и адресе в еепром). Не пойму как в функции сначала объявить массив, а потом из параметра взять его размерность. Возможно ли это?
А что посоветуете по поводу скетча? Задача - писать из еепрома разные строки разной длинны в массив желательно с помощью функции. Я это делаю сейчас в лупе, объявляя массив нужного размера, потом пишу в него из еепром массив char, потом печатаю массив. Работает, только много одинакового кода (различие только в длинне строки и адресе в еепром). Не пойму как в функции сначала объявить массив, а потом из параметра взять его размерность. Возможно ли это?
Да, вот судя по Вашему коду, Вы не это делаете. Вы пишете функцией write (стр. 11), а читаете функцией read (стр. 5). Эти функции работают с ОДНИМ БАЙТОМ. Т.е. в строке 11 Вы пишете ОДИН бойт, а вовсе не строку, а в строке 5 Вы читаете ОДИН байт.
А массив длины, передаваемой через параметр функции - какие проблемы-то? Так "в лоб" и пишите:
void MyFunc(int n) { char szBuffer[n]; // Заводим массив длины n ... }Дык в библиотеке EEPROM2.h длинна читаемого массива определяется длинной массива в который я пишу. Или я не прав? скорей всего не прав потому что не работает. Вот кусок из скетча, он печатает правильно:
if (!BuffMaskPrt) { char BuffMask[15]; EEPROM_read(501, BuffMask); lcd.setCursor(3, 1); lcd.print(BuffMask); BuffMaskPrt = true; }Виноват, у Вас EEPROM_read, а мне привидилось EEPROM.read
Там надо смотреть что за макрос EEPROM_read. Скорее всего, да - не правы и длина определяется на этапе компиляции, но надо смотреть. У меня сейчас нет этой библиотеки, если выложите текст или ссылку, я посмотрю.
Да, проблема была в библиотеке, сам бы мог додуматься раньше. Спасибо!