cancel
Showing results for 
Search instead for 
Did you mean: 

Different behaviours for sscanf from STM32Cube and ARM toolchains

EveRed
Associate

Hi,

I have some code with a call to sscanf from libc.a.

The code is as follow:

 

uint8_t arg1;
char arg2[7];
char arg3[64];
uint16_t arg4;
uint16_t arg5;
char arg6[8];

sscanf( msg,
"%hhu,\"%[^\"]\",\"%[^\"]\",%hu,%hu,%hhu",
&arg1,
arg2,
arg3,
&arg4,
&arg5,
&arg6);

 

msg is for instance:

 

+CIPSTATE:0,"TCP","52.215.18.77",80,55033,0\r\n

 

I have built it with both STM32CubeIDE embedded libraries, and standard ARM libraries, version 10.3.1.
This code works with STM32CubeIDE libraries, but not with standard ARM toolchains.

Interestingly enough, if I use %d instead of %hhu and let it silently cast, it seems like it works with the default toolchain too.

 

"%d,\"%[^\"]\",\"%[^\"]\",%hu,%hu,%d"

 

Is there an explaination for this behaviour?
Are ther implementation differences between libc.a sscanf from the standard ARM toolchain distribution and from the STM32CubeIDE distributed toolchain?

This discussion is locked. Please start a new topic to ask your question.
1 REPLY 1
TDK
Super User

Looks like %hhu is not a standard specifier and implementations treat it differently. Might want to stick with the standards if you want your code to be portable. %u, %d is certainly going to work the same on all implementations.

If you feel a post has answered your question, please click "Accept as Solution".