Date: Wed, 11 Mar 2009 00:00:11 +0100 From: =?ISO-8859-1?Q?G=E1bor_K=F6vesd=E1n?= <gabor@FreeBSD.org> To: jimmy@mammothcheese.ca Cc: freebsd-hackers@freebsd.org Subject: Re: fgetc doubts Message-ID: <49B6F0FB.5020307@FreeBSD.org> In-Reply-To: <49B6E91A.4040604@mammothcheese.ca> References: <49B6DC95.9070607@FreeBSD.org> <49B6E91A.4040604@mammothcheese.ca>
next in thread | previous in thread | raw e-mail | index | archive | help
James Bailie escribió: > fgetc() returns an int so that EOF may be distinguished from valid > return values. Valid values are 8-bit values. EOF is a 32-bit value. > > EOF is a 32-bit two's-complement -1 (0xffffffff), and -1 input is 8-bit > two's-complement -1 (0xff). When fgetc() casts this to an int, it > becomes 0x000000ff, or 255, and thus the two values may be distinguished > from each other. > > I haven't looked at your code, but you are probably comparing EOF with > the value returned by fgetc() after it has been cast to a char. EOF is > getting cast to a char implicitly in the comparison, so the comparison > becomes a comparison between 0xff and 0xff. You need to test the int > returned by fgetc() for EOF before assigning it to a char. Thanks, I've found all the pieces of the puzzle from the three comments and it works now. -- Gabor Kovesdan FreeBSD Volunteer EMAIL: gabor@FreeBSD.org .:|:. gabor@kovesdan.org WEB: http://people.FreeBSD.org/~gabor .:|:. http://kovesdan.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49B6F0FB.5020307>