Надеюсь местные мудрецы увидят тему)
С выделением памяти все равно ничего не вышло, в выводе стабильно маячит первая цифра…
Код можно упростить до:
char* result = new char[3];
char* formatHours(){
result = "12";
return result;
}
void loop() {
Serial.println(*formatHours()); //Должно быть "12", вместо этого "1"
}
Ага, вопрос решен, Serial.println(*formatHours());
процедура звезду поймала, убрал и все заработало!)))
А sprintf() запретили у вас ??? Тогда itoa() почему не запретили ??? Или надо именно поизвращаться с динамической памятью ???
Komandir приветствую! Я читал, что sprintf() тянет за собой около 2кВ памяти, все таки библиотечная функция…
Itoa() по вашему ничего не тянет ???
Уверен, что тянет)
В sprintf() есть возможность добавлять ноль перед числом для вывода?
char(0x30+hour/10) и char(0x30+hour%10) не спасут вас ???
Мне на дисплей нужно вывести время не как “1 : 1”, а как “01:01”, к примеру.
Разбить время на часы и минуты не проблема, это вопрос алгоритма, а не структуры данных.
А я о чем по вашему ???
аааа, я понял, как раз таки это алгоритм) Суть уловил, завтра попробую!!!
После целочисленного деления получаем вожделенный 0 в десятках
Все работает как надо, очень просто вышло, а я не в те дебри ушел с самого начала. Хотя осадочек от указателей остался, все таки не заработало, обидно…
В общем большое спасибо Командиру персонально, и всем, кто откликнулся!!!
разве указатели виноваты, если вы делаете детские ошибки?
Вот например в этом коде:
char* result = new char[3];
char* formatHours(){
result = "12";
return result;
}
void loop() {
Serial.println(*formatHours()); //Должно быть "12", вместо этого "1"
}
Объясните мне, что означает звездочка перед именем функции в операторе println() в 8 строке?
Забегая вперед - если звездочку убрать, будет печатать “12”, как и положено.
ЗЫ кстати, присваивать строковую константу массиву (строка 3) нельзя, это путь к очередным “необъяснимым глюкам” в программе
И? Всё нормально, переменная уничтожается, но её значение никуда ведь не девается, а память на которую она указывает выделена глобально. Ничего тут страншного нет.
@b707 про звёздочку правильно писал. Стоит её убрать, как всё начинает работать.
Другое дело что ТС тут “расписался” - всё это можно втрое сократить, но это уже другой вопрос.
Добрый день, спасибо за отклик, да, я выше писал про эту звёздочку, убрал и заработало.
Ну и код сократите. Например, в случае, если hours >= 10
у Вас itoa
вызывается два раза. Простой вопрос - наюха?
Даже если она была динамически создана?
Конечно.
Сейчас, я освобожусь и попробую коротко и простыми словами объяснить механзим того, что там происходит.