\377 character in c

c, file-read

Solution

The `getc()` function returns a result of type `int`, not of type `char`. Your `char ch;` should be `int ch;`.

Why does it return an `int`? Because the value it returns is either the character it just read (as an `unsigned char` converted to `int`) or the special value `EOF` (typically -1) to indicate either an input error or an end-of-file condition.

Don't use the `feof()` function to detect the end of input. It returns true only after you've run out of input. Your last call to `getc()` is returning `EOF`, which when stored into a `char` object is converted to `(char)-1`, which is typically `'\377'`.

Another problem is that `feof()` will never return a true value if there was an input error; in that case, `ferror()` will return true. Use `feof()` and/or `ferror()` after `getc()` returns `EOF`, to tell why it returned `EOF`.

To read from a file until you reach the end of it:

int ch;
while ((ch = getc(filelist)) != EOF) {
    /* ch contains the last character read; do what you like with it */
}

Suggested reading: Section 12 of the comp.lang.c FAQ.

Problem

I am trying to read a file in c. I have a `.txt` file and it has that content: ``` file_one.txt file_two.txt file_three.txt file_four.txt ``` When I try to read this file with `fopen` I get this output: ``` file_one.txt file_two.txt file_three.txt file_four.txt\377 ``` What does `\377` mean? Here's my code: ``` #include <stdio.h> #include <stdlib.h> int main(int argc, const char * argv[]){ FILE *filelist; char ch; filelist=fopen("file-path", "rt"); while (!feof(filelist)) { ch = getc(filelist); printf("%c",ch); } fclose(filelist); return 0; } ```

Original source