我正在使用sprintf
函数创建一个新字符串,该字符串具有特定格式的其他字符串信息,以通过ESP8266发送。到目前为止,该代码运行良好,但是有一个新的请求来增加 STM32 的响应,我需要始终以相同的大小发送信息(以便轻松访问内部信息)。对于最后一个请求,我还使用了sprintf
的{{1}}函数。这是我的代码无法正常工作的原因,我不知道为什么,当我为所有字符串添加静态大小时,结果字符串会丢失数据。
我已经尝试将信息分成两个字符串,增加%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
您可以检查前面的字符串是否有99个字符而不是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"
命令,但这没有任何意义。