delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2004/09/02/16:00:06

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
X-Trace-PostClient-IP: 68.147.131.211
From: Brian Inglis <Brian DOT Inglis AT SystematicSW DOT Invalid>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: scanf: strange behavior?
Organization: Systematic Software
Message-ID: <a4tej0ha3ogninujdhurgel3jcn0r441m2@4ax.com>
References: <20040902144152 DOT GH6858 AT webhome DOT cz> <41376655 DOT 2A1807EC AT yahoo DOT com>
X-Newsreader: Forte Agent 1.93/32.576 English (American)
MIME-Version: 1.0
Lines: 53
Date: Thu, 02 Sep 2004 19:59:24 GMT
NNTP-Posting-Host: 24.71.223.147
X-Complaints-To: abuse AT shaw DOT ca
X-Trace: pd7tw1no 1094155164 24.71.223.147 (Thu, 02 Sep 2004 13:59:24 MDT)
NNTP-Posting-Date: Thu, 02 Sep 2004 13:59:24 MDT
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019