Mail Archives: djgpp/2004/09/02/22:30:15
Brian Inglis wrote:
> <cbfalconer AT yahoo DOT com> wrote:
>> Egon Eckert wrote:
>>>
>>> compiling and running this code:
>>>
>>> #include <stdio.h>
>>>
>>> int main(int, const char**)
>>> {
>>> char c[2];
>>> printf("%d\n", sscanf("A", "%c%c", c, c + 1));
>>> return 0;
>>> }
>>>
>>> gives:
>>>
>>> 1 in GNU libc (on Linux)
>>> 1 in Borland C++ 3.1 (on DOS)
>>> -1 in djgpp
>>>
>>> It's conformant with the docs: "If input ends, or if there is any
>>> input failure before the first item is converted and assigned, `EOF'
>>> is returned.", so it's not to be called a 'bug', but...
>>>
>>> Do you think it's a standard violation, or just a "difference",
>>> ie. behavior not specified by POSIX, ANSI or other (involved)
>>> authority?
>>
>> I think DJGPP is correct in returning EOF, because the string ends
>> before the scan is complete. The only authority is the C
>> standard. I would consider it a library bug on Borland and your
>> particular Linux installation of libc. This is better suited to
>> comp.lang.c.
>
> Wrong way round.
>
>> At least all three signalled a failure.
>
> GNU "info libc a scanf" and the standard agree that EOF is returned
> only if an input failure (terminator or eof, error) occurs before
> *any* match, including any literal strings and suppressed assignments,
> and only assignments due to matched input are counted in the return
> value, excluding %n and suppressed assignments, so scanf returns EOF
> only on early input failure, and >= *0* on later input failure,
> matching failure, or success of course.
I just got around to running it under DJGPP 2.03, and got 1.
--
Some similarities between GWB and Mussolini:
a) The strut; b) Making war until brought up short:
Mussolini: Ethiopia, France, Greece.
GWB: Afghanistan, Iraq.
- Raw text -