The newline character is represented by "\n"
in C code. Is there an equivalent for the end-of-file (EOF) character?
相关问题
- Multiple sockets for clients to connect to
- What is the best way to do a search in a large fil
- glDrawElements only draws half a quad
- Index of single bit in long integer (in C) [duplic
- Equivalent of std::pair in C
EOF is not a character (in most modern operating systems). It is simply a condition that applies to a file stream when the end of the stream is reached. The confusion arises because a user may signal EOF for console input by typing a special character (e.g Control-D in Unix, Linux, et al), but this character is not seen by the running program, it is caught by the operating system which in turn signals EOF to the process.
Note: in some very old operating systems EOF was a character, e.g. Control-Z in CP/M, but this was a crude hack to avoid the overhead of maintaining actual file lengths in file system directories.
EOF
is not a character. It can't be: A (binary) file can contain any character. Assume you have a file with ever-increasing bytes, going 0 1 2 3 ... 255 and once again 0 1 ... 255, for a total of 512 bytes. Whichever one of those 256 possible bytes you deemEOF
, the file will be cut short.That's why
getchar()
et al. return anint
. The range of possible return values are those that achar
can have, plus a genuineint
valueEOF
(defined instdio.h
). That's also why converting the return value to achar
before checking forEOF
will not work.Note that some protocols have "EOF" "characters." ASCII has "End of Text", "End of Transmission", "End of Transmission Block" and "End of Medium". Other answers have mentioned old OS'es. I myself input ^D on Linux and ^Z on Windows consoles to stop giving programs input. (But files read via pipes can have ^D and ^Z characters anywhere and only signal EOF when they run out of bytes.) C strings are terminated with the
'\0'
character, but that also means they cannot contain the character'\0'
. That's why all C non-string data functions work using achar
array (to contain the data) and asize_t
(to know where the data ends).Edit: The C99 standard §7.19.1.3 states:
I've read all the comments. It's interesting to notice what happens when you print out this:
As we can see here, EOF is NOT a character (whatsoever).
I think it may vary from system to system but one way of checking would be to just use
printf
I did this on Windows and
-1
was printed to the console. Hope this helps.There is the constant
EOF
of type int, found in stdio.h. There is no equivalent character literal specified by any standard.No. EOF is not a character, but a state of the filehandle.
While there are there are control characters in the ASCII charset that represents the end of the data, these are not used to signal the end of files in general. For example EOT (^D) which in some cases almost signals the same.
When the standard C library uses signed integer to return characters and uses -1 for end of file, this is actually just the signal to indicate than an error happened. I don't have the C standard available, but to quote SUSv3: