[comp.std.c] printf precision for strings

Ray Butterworth <rbutterw@watmath.waterloo.edu> (04/26/91)

Consider the statement:
    printf("%.*s", len, data);
If len==0, this should produce no output.
But, what if data==(char*)0 too?

With some compilers it produces the string "<nil>".
(I realize this "<nil>" is just a silly way of avoiding dumping core
 or producing meaningless garbage, but that's not what I'm asking about.)

Shouldn't the precision of 0 guarantee that no output will occur,
or does using the bad pointer mean all bets are off?

gwyn@smoke.brl.mil (Doug Gwyn) (04/27/91)

In article <1991Apr26.143651.18289@watmath.waterloo.edu> rbutterw@watmath.waterloo.edu (Ray Butterworth) writes:
>Shouldn't the precision of 0 guarantee that no output will occur,
>or does using the bad pointer mean all bets are off?

"The argument SHALL be a pointer to an array of character type."
Violation of a "shall" produces undefined behavior.
You're lucky it didn't ABEND.