From: Erik Faye-Lund Date: Thu, 07 Oct 2010 18:37:00 GMT Subject: Re: git log doesn't allow %x00 in custom format anymore? Message-ID: In-Reply-To: <20101007183342.GA20289@sigill.intra.peff.net> On Thu, Oct 7, 2010 at 8:33 PM, Jeff King wrote: > On Thu, Oct 07, 2010 at 08:19:01PM +0200, Erik Faye-Lund wrote: > >> Yeah. When I read K&R a bit closer, I find this: >> >> "A number specifying a minimum field width. The converted argument >> will be printed in a field _at least this wide_, and wider if >> necessary. If the converted argument has fewer characters than the >> field width _it will be padded_ on the left (or right, if left >> adjustment has been requested) to make up the field width." > > You are confusing field width (%*s) with precision (%.*s) here. > > C89 is pretty clear that the behavior I am seeing is mandated: > >  7.19.6.1, paragraph 4: > >     An optional precision that gives ... the maximum number of bytes to >     be written for s conversions. > >  7.19.6.1, paragraph 8, item "s": > >    ... Characters from the array are written up to (but not including) >    the terminating null character. If the precision is specified, no >    more than that many bytes are written. If the precision is not >    specified or is greater than the size of the array, the array shall >    contain a null character. > > so it is always about giving a maximum to print an unterminated string, > or to print a partial string. But printf always stops at a NUL. > > -Peff > Indeed, thanks for clearing that up.