On Thu, Oct 7, 2010 at 8:33 PM, Jeff King <peff@xxxxxxxx> 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. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html