Sprintf усекает строку результата в STM32 - PullRequest
1 голос
/ 06 июня 2019

Я использую функцию sprintf для создания новой строки, которая содержит информацию о других строках в определенном формате для отправки через ESP8266. Код работает хорошо до сих пор, но есть новый запрос на увеличение ответа STM32 , и мне нужно отправлять информацию всегда с одинаковым размером (чтобы легко получить доступ к информации внутри). Для этого последнего запроса я также использовал функцию sprintf, используя %5s. Вот когда мой код не работает, и я не знаю, почему, когда я добавляю для всех строк статический размер, результирующая строка теряет данные.

Я уже пытался разделить информацию на две строки, увеличить размер строк weatherData, а также dataControl.CurrentData, но любая работа. Я использую функцию strlen, чтобы узнать размер моей последней строки, и странно то, что эта функция дает мне правильное значение размера, но конечная строка не имеет этого размера.

sprintf(dataControl.CurrentData,"%22s,%5s,%5s,%5s,%5s,%5s,%5s,%5s,%5s,%5s,%5s,%s,%5s,%5s,%5s,%hu\n",
    weatherData.Date,
    weatherData.DirectionWind,
    weatherData.SpeedWind,
    weatherData.Irradiance_1,
    weatherData.Irradiance_2,
    weatherData.TempEnvironment,
    weatherData.HumidityEnvironment,
    weatherData.Measure_1,
    weatherData.Measure_2,
    weatherData.Measure_3,
    weatherData.Measure_4,
    weatherData.AmountRain,
    weatherData.TempPanel_1,
    weatherData.TempPanel_2,
    weatherData.TempPanel_3,
    weatherData.checksum
);

strlen(dataCurrent) = 109

dataCurrent = "2019-05-30 17:30:20.11, .0, .0,219.1,223.0, .0, .0, 34.7, 31.7, 30.4, 30.6,.0000, 51.0, 51"

Как вы можете убедиться, предыдущая строка содержит 99 символов, а не 109. Я считаю, что есть заключительная команда \0 вокруг последней строки, но это не имеет смысла.

...