In C, how should I read a text file and print all strings In C, how should I read a text file and print all strings c c

In C, how should I read a text file and print all strings


The simplest way is to read a character, and print it right after reading:

int c;FILE *file;file = fopen("test.txt", "r");if (file) {    while ((c = getc(file)) != EOF)        putchar(c);    fclose(file);}

c is int above, since EOF is a negative number, and a plain char may be unsigned.

If you want to read the file in chunks, but without dynamic memory allocation, you can do:

#define CHUNK 1024 /* read 1024 bytes at a time */char buf[CHUNK];FILE *file;size_t nread;file = fopen("test.txt", "r");if (file) {    while ((nread = fread(buf, 1, sizeof buf, file)) > 0)        fwrite(buf, 1, nread, stdout);    if (ferror(file)) {        /* deal with error */    }    fclose(file);}

The second method above is essentially how you will read a file with a dynamically allocated array:

char *buf = malloc(chunk);if (buf == NULL) {    /* deal with malloc() failure */}/* otherwise do this.  Note 'chunk' instead of 'sizeof buf' */while ((nread = fread(buf, 1, chunk, file)) > 0) {    /* as above */}

Your method of fscanf() with %s as format loses information about whitespace in the file, so it is not exactly copying a file to stdout.


There are plenty of good answers here about reading it in chunks, I'm just gonna show you a little trick that reads all the content at once to a buffer and prints it.

I'm not saying it's better. It's not, and as Ricardo sometimes it can be bad, but I find it's a nice solution for the simple cases.

I sprinkled it with comments because there's a lot going on.

#include <stdio.h>#include <stdlib.h>char* ReadFile(char *filename){   char *buffer = NULL;   int string_size, read_size;   FILE *handler = fopen(filename, "r");   if (handler)   {       // Seek the last byte of the file       fseek(handler, 0, SEEK_END);       // Offset from the first to the last byte, or in other words, filesize       string_size = ftell(handler);       // go back to the start of the file       rewind(handler);       // Allocate a string that can hold it all       buffer = (char*) malloc(sizeof(char) * (string_size + 1) );       // Read it all in one operation       read_size = fread(buffer, sizeof(char), string_size, handler);       // fread doesn't set it so put a \0 in the last position       // and buffer is now officially a string       buffer[string_size] = '\0';       if (string_size != read_size)       {           // Something went wrong, throw away the memory and set           // the buffer to NULL           free(buffer);           buffer = NULL;       }       // Always remember to close the file.       fclose(handler);    }    return buffer;}int main(){    char *string = ReadFile("yourfile.txt");    if (string)    {        puts(string);        free(string);    }    return 0;}

Let me know if it's useful or you could learn something from it :)


Instead just directly print the characters onto the console because the text file maybe very large and you may require a lot of memory.

#include <stdio.h>#include <stdlib.h>int main() {    FILE *f;    char c;    f=fopen("test.txt","rt");    while((c=fgetc(f))!=EOF){        printf("%c",c);    }    fclose(f);    return 0;}