Sprintf在STM32中截断结果字符串

时间:2019-06-05 21:28:30

标签: c printf stm32 at-command stm32f4

我正在使用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"命令,但这没有任何意义。

0 个答案:

没有答案