Mail Archives: djgpp/2004/09/02/16:00:06
On Thu, 02 Sep 2004 19:08:36 GMT in comp.os.msdos.djgpp, CBFalconer
<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.
--
Thanks. Take care, Brian Inglis Calgary, Alberta, Canada
Brian DOT Inglis AT CSi DOT com (Brian[dot]Inglis{at}SystematicSW[dot]ab[dot]ca)
fake address use address above to reply
- Raw text -