tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Bug in scanf?
Am 09.12.2025 um 09:27 schrieb Anders Magnusson:
> Morning,
>
> Den 2025-12-09 kl. 03:49, skrev Robert Elz:
>> Date: Mon, 8 Dec 2025 20:45:00 +0100
>> From: Anders Magnusson<ragge%tethuvudet.se@localhost>
>> Message-ID:<ffd8ba3e-ec94-4583-a431-13a5d7c88a2c%tethuvudet.se@localhost>
>>
>> | I just stumbled over something which may be a bug in scanf()...?
>> | This example is in C99 7.19.6.2 clause 20.
>>
>> Yes, but nowhere there does it say what the result should be in the
>> case that you give, and I think you're arriving at an incorrect
>> conclusion.
> Sorry, but I think that is very clear? The input scanning should stop
> whenever something unwanted is read.
> And as you noticed in the followup mail; this was an example from the
> standard which was what I was referring to :-)
>
> Also, as you note it should accept whatever strtod() do, _but_: C99 note
> 242 (C23 note 348) says:
>
> "fscanf pushes back at most one input character onto the input stream.
> Therefore, some sequences
> that are acceptable to strtod, strtol, etc., are unacceptable to fscanf.".
>
> which is what should happen here (and the reason "100ergs" should fail
> for %f in *scanf()).
> When reading the 'r' the scanning for %f fails and it returns. As the
> standard says...?
That's exactly the reasoning I had in mind. I wonder though why fscanf
is _required_ to reject this sequence, instead of allowing an
implementation with a larger pushback buffer to accept this string, thus
making this decision a quality-of-implementation issue. The C99
rationale doesn't mention this particular possibility.
Roland
Home |
Main Index |
Thread Index |
Old Index