Robert Elz <kre@munnari.oz.au> writes:
%4ld doesn't print a leading 0, did you actually test that?
Sorry, no, I misread the format. But leading spaces aren't allowed by the standard, so an implementation can't use %4ld either.
If the standard actually says what you say (I don't have anything to do with it) then the standard is broken, and someone should file a defect report.
Feel free, but when I suggested something like that earlier this year <http://groups.google.com/groups?selm=7wekp4gm9s.fsf%40sic.twinsun.com>, the response from P. J. Plauger (a member of the standardization committee) was that it was not important enough to spend energy on. See <http://groups.google.com/groups?q=g:thl4051128685d&selm=fIhvc.24831%24oh7.21...>.
This one isn't just of academic interest, there's lots of code that does stuff like
printf("The date is: %.24s today\n", asctime(tm));
and expects that there cannot be a newline between the date and the word "today".
Yup, it's a problem all right. However, in my experience code like that is generally nonportable already, since it assumes that asctime can't possibly overrun its static buffer, and this assumption is false for many POSIX platforms. So I don't think supporting this code is important enough to violate the standard. Also, more typically I see code like this: printf("The date is: %.24s today\n", ctime(&t)); and this is definitely broken for arbitrary time_t values, since ctime returns NULL if the time_t is so large that tm_year cannot represent the year.