1 votes

Pour mallocer ou ne pas mallocer, telle est la question!

Est-ce que j'ai besoin d'allouer de la mémoire avec malloc lorsque je crée un fichier à écrire ?

Le fichier sera basé sur le contenu de 2 autres, donc aurais-je besoin d'allouer de l'espace pour le fichier inscriptible de sizeof( fichier a ) + sizeof( fichier b) + 1 ?

Désolé si cela n'a pas de sens; si c'est le cas alors je suppose que je dois aller lire un peu plus :D

Essentiellement, j'ai 2 fichiers txt et une séquence de chaînes de caractères - j'écris chaque ligne de chaque fichier côte à côte séparée par la séquence de chaînes.

fichier txt a

hello stack over 
flow this 
is a test

fichier txt b

jump the
gun i am
a novice

séparateur == xx

sortie ==

hello stack overxxjump the
flow thisxxgun i am
is a testxxa novice

1voto

Brendan Long Points 24372

Si vous le rédigez dans l'ordre, ne pouvez-vous pas simplement utiliser fprintf() ou fwrite() chaque fois que vous avez besoin d'écrire quelque chose, au lieu d'écrire le fichier entier en une seule fois?

ÉDITER: D'après votre mise à jour, voici essentiellement ce que vous devez faire (probablement pas du C valide car je ne suis pas un programmeur C):

ÉDITER2: Avec un peu d'aide de msw:

const int BUFSIZE = 200;
FILE *firstFile = fopen("file1.txt", "r");
FILE *secondFile = fopen("file2.txt", "r");
FILE *outputFile = fopen("output.txt", "w");
char* separateur = "xx";
char firstLine[BUFSIZE], secondLine[BUFSIZE];

// commencez une boucle ici
fgets(firstLine, 200, firstFile);
fgets(secondLine, 200, secondFile);
// Supprimez les '\n' de chaque ligne

fprintf(outputFile, "%s%s%s", firstLine, separateur, secondLine);
// terminez une boucle ici

fclose(outputFile);
fclose(firstFile);
fclose(secondFile);

1voto

Vous avez seulement besoin de malloc la taille entière d'un fichier si vous avez besoin de stocker l'intégralité du fichier en mémoire (et même alors, vous pouvez probablement utiliser mmap ou quelque chose d'autre à la place). Allouez autant de mémoire que nécessaire pour les données avec lesquelles vous avez l'intention de travailler en mémoire : pas plus, pas moins.

0voto

codenheim Points 6836

Les fichiers sont sur le disque, malloc est pour la RAM.

Vous n'alloueriez de la mémoire que si vous aviez besoin d'espace en mémoire pour stocker les données AVANT de les écrire sur le fichier, sinon, généralement, vous utiliseriez un tampon alloué en pile de disons 8k pour écrire dans le fichier par morceaux.

Donc, en prenant votre question telle quelle, non, vous n'alloueriez que rarement de la mémoire juste pour écrire dans un fichier.

Si votre objectif est de garder le fichier en mémoire intégralement, alors vous alloueriez de la mémoire de la taille du fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X