Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 Nov 1996 13:29:19 +0100
From:      Wolfram Schneider <wosch@cs.tu-berlin.de>
To:        joerg_wunsch@uriah.heep.sax.de (Joerg Wunsch)
Cc:        bde@zeta.org.au, cvs-all@freefall.freebsd.org, CVS-committers@freefall.freebsd.org, cvs-usrbin@freefall.freebsd.org, joerg@freefall.freebsd.org
Subject:   Re: cvs commit:  src/usr.bin/sed main.c
Message-ID:  <199611171229.NAA00423@campa.panke.de>
In-Reply-To: <199611170748.IAA11061@uriah.heep.sax.de>
References:  <199611170350.EAA02826@campa.panke.de> <199611170748.IAA11061@uriah.heep.sax.de>

next in thread | previous in thread | raw e-mail | index | archive | help
J. Wunsch writes:
>Nope, my question was which standard claims that feof() could return
>wrong results after a successful fopen() but before reaching the EOF
>of the stream.

comp.lang.c Answers to Frequently Asked Questions

Section 12. Stdio

12.1:	What's wrong with this code?

		char c;
		while((c = getchar()) != EOF) ...

A:	For one thing, the variable to hold getchar's return value
	must be an int.  getchar() can return all possible character
	values, as well as EOF.  By passing getchar's return value
	through a char, either a normal character might be
	misinterpreted as EOF, or the EOF might be altered (particularly
	if type char is unsigned) and so never seen.

	References: K&R1 Sec. 1.5 p. 14; K&R2 Sec. 1.5.1 p. 16; ANSI
	Sec. 3.1.2.5, Sec. 4.9.1, Sec. 4.9.7.5; ISO Sec. 6.1.2.5,
	Sec. 7.9.1, Sec. 7.9.7.5; H&S Sec. 5.1.3 p. 116, Sec. 15.1,
	Sec. 15.6; CT&P Sec. 5.1 p. 70; PCS Sec. 11 p. 157.

12.2:	Why does the code

		while(!feof(infp)) {
			fgets(buf, MAXLINE, infp);
			fputs(buf, outfp);
		}

	copy the last line twice?

A:	In C, EOF is only indicated *after* an input routine has tried
	to read, and has reached end-of-file.  (In other words, C's I/O
	is not like Pascal's.)  Usually, you should just check the
	return value of the input routine (fgets() in this case); often,
	you don't need to use feof() at all.

	References: K&R2 Sec. 7.6 p. 164; ANSI Sec. 4.9.3, Sec. 4.9.7.1,
	Sec. 4.9.10.2; ISO Sec. 7.9.3, Sec. 7.9.7.1, Sec. 7.9.10.2; H&S
	Sec. 15.14 p. 382.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199611171229.NAA00423>