c - printf format string lint warning -


i'm stuck fixing ancient code, , here today's issue:

output_file_status = fprintf ( data_file, "%03d%08s%+014.2f%06.3f%",     longvalue, charstarvalue, double1, double2 ); 

lint32 produces: lint32 results in “malformed format string”

1) agree format string can not end in % sign? don't believe standalone % has meaning.

2) when either remove trailing %, or append additional %, still same warning.

this using oracle pro*c compiler (so charstarvalue (char*)varchar.arr ).

taking piece piece:

"%03d" expects int. op supplies longvalue. long, specifier should "%03ld".

"%08s" expects pointer char. op supplies charstarvalue. ok. "0" in specifier undefined behavior %s. recommend "%8s"

"%+014.2f" expects double. ok. flags '+', '0' ok.

"%06.3f" expects double. ok. flags '+', '0' ok.

"%" should have after else behavior undefined. recommend removal or "%%".


to op's 2 points

1 proper format should not end lone %, may end paired %%s.
standalone % introduces "if conversion specification invalid, behavior undefined" c11 7.21.6.1 9.

2 rid of warnings, try "%03ld%8s%+014.2f%06.3f".


Comments

Popular posts from this blog

Unable to remove the www from url on https using .htaccess -