преобразование double в char*. Странные результаты от dtostrf
Вот код:
void setup()
{
Serial.begin(9600);
delay(300);
double lat = 1111.11;
double lon = 4444.44;
const byte len{10};
char sLat[len];
char sLon[len];
dtostrf(lat, len, 2, sLat);
Serial.println(sLat);
Serial.println("---");
dtostrf(lon, len, 2, sLon);
Serial.println(sLon);
Serial.println(sLat); // <-- ничего не печатает!
Serial.println("---");
dtostrf(lat, len, 2, sLat);
Serial.println(sLat);
Serial.println(sLon); // <-- ничего не печатает!
}
void loop()
{
}
Вот результат:
1111.11
---
4444.44
---
1111.11
4444.44 1111.11
Как видите, каждый следующий вызов dtostrf
странным образом разрушает предыдущие результаты.
В чем проблема?
@zhekaus, 👍2
1 ответ
Лучший ответ:
▲ 2
Если len
является размером текстового массива, вам нужно место для завершающего символа '\0'.
Таким образом, второй параметр dtostrf
должен быть меньше, чем len
.
,
@DataFiddler
Смотрите также:
- Как получить тип данных переменной?
- Преобразование в Unix Timestamp и обратно
- Невозможно создать массив типа const char*
- ардуино - миллисекунды ()
- Ошибка Cast from 'char*' to 'uint8_t {aka unsigned char}' loses precision [-fpermissive]
- Получение шестнадцатеричных данных с терминала
- Какой тип данных Arduino допускает десятичные дроби?
- Поскольку double и float представляют один и тот же тип данных (обычно), что предпочтительнее?
Да, конечно, ты прав! Большое спасибо! Я исправил объявление:
char sLat[len+1]
, @zhekaus