X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f X-Trace-PostClient-IP: 68.147.131.211 From: Brian Inglis Newsgroups: comp.os.msdos.djgpp Subject: Re: scanf: strange behavior? Organization: Systematic Software Message-ID: 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 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit 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 wrote: >Egon Eckert wrote: >> >> compiling and running this code: >> >> #include >> >> 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