преобразование 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 странным образом разрушает предыдущие результаты.

В чем проблема?

, 👍2


1 ответ


Лучший ответ:

2

Если len является размером текстового массива, вам нужно место для завершающего символа '\0'. Таким образом, второй параметр dtostrf должен быть меньше, чем len.

,

Да, конечно, ты прав! Большое спасибо! Я исправил объявление: char sLat[len+1], @zhekaus