La lecture de l'intégralité du contenu d'un fichier texte - C

Je suis en train de lire tout le contenu d'un fichier texte. Voici le code que j'ai écrit.

#include <stdio.h>
#include <stdlib.h>

#define PAGE_SIZE 1024

static char *readcontent(const char *filename)
{
    char *fcontent = NULL, c;
    int index = 0, pagenum = 1;
    FILE *fp;
    fp = fopen(filename, "r");

    if(fp) {
        while((c = getc(fp)) != EOF) {
            if(!fcontent || index == PAGE_SIZE) {
                fcontent = (char*) realloc(fcontent, PAGE_SIZE * pagenum + 1);
                ++pagenum;
            }
            fcontent[index++] = c;
        }
        fcontent[index] = '
#include <stdio.h>
#include <stdlib.h>
#define PAGE_SIZE 1024
static char *readcontent(const char *filename)
{
char *fcontent = NULL, c;
int index = 0, pagenum = 1;
FILE *fp;
fp = fopen(filename, "r");
if(fp) {
while((c = getc(fp)) != EOF) {
if(!fcontent || index == PAGE_SIZE) {
fcontent = (char*) realloc(fcontent, PAGE_SIZE * pagenum + 1);
++pagenum;
}
fcontent[index++] = c;
}
fcontent[index] = '\0';
fclose(fp);
}
return fcontent;
}
static void freecontent(char *content)
{
if(content) {
free(content);
content = NULL;
}
}
'
; fclose(fp); } return fcontent; } static void freecontent(char *content) { if(content) { free(content); content = NULL; } }

C'est l'utilisation

int main(int argc, char **argv)
{
    char *content;
    content = readcontent("filename.txt");
    printf("File content : %s\n", content);
    fflush(stdout);
    freecontent(content);
    return 0;
}

Depuis que je suis novice en C, je me demande si ce code est parfait? Voyez-vous des problèmes ou des améliorations?

Compilateur utilisé : GCC. Mais ce code est prévu pour être multi-plateforme.

Toute aide serait appréciée.

Modifier

Voici le code mis à jour avec fread et ftell.

static char *readcontent(const char *filename)
{
    char *fcontent = NULL;
    int fsize = 0;
    FILE *fp;

    fp = fopen(filename, "r");
    if(fp) {
        fseek(fp, 0, SEEK_END);
        fsize = ftell(fp);
        rewind(fp);

        fcontent = (char*) malloc(sizeof(char) * fsize);
        fread(fcontent, 1, fsize, fp);

        fclose(fp);
    }
    return fcontent;
}

Je me demande ce que sera la relative complexité de cette fonction?

je ne pense pas qu'utiliser que comme un nom de fichier, vous obtiendrez beaucoup d'éloges à l'
ahh.. Désolé. J'ai été le tester et j'ai oublié de l'enlever. Extrêmement désolé.
Je pense qu'en général, vous devriez essayer de travailler en fixe morceaux; dans ce cas, vous serait de la lecture dans PAGE_SIZE octets à la fois (ou moins si c'est le dernier morceau) et de l'impression de chaque morceau de fil de la lecture.
Savez-vous ce que votre code si vous n'avez pas l'autorisation de lecture pour "filename.txt"? Est-ce que vous voulez qu'il fasse?
Vous devriez faire c un int. ([f|]getc() retourne int)

OriginalL'auteur Navaneeth K N | 2010-08-01