Я использую функцию 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
вокруг последней строки, но это не имеет смысла.