Question on rtems printf problem

Frank Kühndel frank.kuehndel at embedded-brains.de
Tue Dec 20 11:08:55 UTC 2022


Hello tianye,

On 12/20/22 03:59, tianye at sugon.com wrote:
> Hi:
> I have a testcode, it will lead to uart print space forever.
> 
> Demo code like this:
> Init()
> {
> create a task;
> start this task;
> *printf("%*\n");* while(1) { sleep() } } This code lead to uart print 
> space forever('SPACE' ascii is 0x20): 
> 'SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE''SPACE'......

"%*\n" is an illegal or incorrect "conversion specification" because is 
misses an "conversion specifier" (e.g. an "d", "s" or "x" before the 
"\n"). Whether the behavior is a bug depends on the specification of the 
behavior of `printf()` in such a case. I am not aware of any 
specification of what should happen when the "conversion specification" 
is malformed.

I tried with gcc on an ordinary Linux and it printed (to my surprise):

%107348472

The print out of spaces cannot be excused with the presents of a field 
with specifier "*" because without knowing the length of the content of 
the field - due to the missing conversion specifier - the software 
cannot calculate how may spaces to print out.

Anyway, your `printf()` should trigger this compiler warning:

../../../testsuites/samples/hello/init.c:44:14: warning: unknown 
conversion type character '\x0a' in format [-Wformat=]
    44 |   printf( "%*\n" );
       |              ^~

Since the issue appears to be triggered in newlib code, I believe 
changing RTEMS code wont help in any case. Yet, again it is dubious to 
me whether this is a bug in the first place.

Greetings
Frank

-- 
embedded brains GmbH
Herr Frank KÜHNDEL
Dornierstr. 4
82178 Puchheim
Germany
email: frank.kuehndel at embedded-brains.de
phone:  +49-89-18 94 741 - 23
mobile: +49-176-15 22 06 - 11
fax:    +49-89-18 94 741 - 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/



More information about the users mailing list