Skip site navigation (1)Skip section navigation (2)
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>