I have a case for sscanf that could not handle all the formats:
rc = sscanf(buf, "sig:%s\ncallid:%s\ncallname:%s\ngroup:%d\npgtype:%d\n",
(char *) (&parms->sig), (char *) (&parms->callid),
(char *) (&parms->callname),&parms->group_num,(&parms->msg_type));
what's inside the buf:
The matching failed after the first "%d" - the issue in sscanf is:
- A: the next character in format is '\n' - which is not treated as a white space (only blank and '\t' are treated )
- B: the next character in input line is '\n' - which is a white space so it is thrown away then read next non-white space which is 'p' in the above example.
A and B did not match so the function sscanf returned without trying to match others.
I have a tempory work around is all white spaces are treated same in
_io_scanline_format_ignore_white_space, _io_scanline_ignore_white_space, and _io_scanline as well.