[comp.lang.c] sscanf

zvs@bby.oz.au (Zev Sero) (12/05/90)

Stan = browns@iccgcc.decnet.ab.com (Stan Brown)
Chris = chris@mimsy.umd.edu (Chris Torek) 

It is clear that
	 strtoul("8", (char **)0, 8)
succeeds and returns 0.  The question is whether the *scanf conversion
function can be regarded as having `succeeded'.  Stan thinks that it
should, quoting at length from the Standard, and Chris thinks that it
should not.

I haven't got the Standard, but Plauger & Brodie is supposed to be the
next best thing, and I quote from page 113  (Scan Functions):

  Except for the conversion specifier n (which consumes no input),
  each conversion specification determines a pattern that one or more
  of the next characters in the input must match.

It seems to me that this is the important bit.  For a conversion to
succeed, not only must the called function succeed, but it must match
one or more characters. In this case, strtoul matches zero characters,
so the conversion fails, x keeps whatever value it had before, and
strtoul returns 0.
--
				Zev Sero  -  zvs@bby.oz.au
`...And the way to do something about it is to do something about it.'
					- Joan Kirner (29/11/90)