2010-03-05 4 views
1

Ai-je besoin de malloc pour créer un fichier à écrire?Pour malloc ou pas pour malloc, c'est la question!

Le fichier sera basé sur le contenu de 2 autres, donc aurais-je besoin d'espace malloc pour le fichier inscriptible de sizeof(file a) + sizeof(file b) + 1? Désolé, cela n'a aucun sens. Si ce n'est pas le cas, je suppose que je devrais aller en lire plus: D

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

txt file a 

hello stack over 
flow this 
is a test 

txt file b 

jump the 
gun i am 
a novice 

seperator == xx 

output == 

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

fichiers texte ou fichiers binaires? Fusionnez-vous 2 fichiers? – Tom

+1

Vous devez mieux indiquer votre objectif. La manipulation de fichiers n'implique pas nécessairement l'utilisation de "malloc" et dépend donc de votre utilisation/utilisation réelle. – Romain

+0

essentiellement, j'ai 2 fichiers txt et une séquence de chaînes - j'écris chaque ligne de chaque fichier côte à côte séparés par la séquence de chaînes – haz

Répondre

1

Si vous écrivez dans l'ordre, vous ne pouvez pas simplement utiliser fprintf() ou fwrite() chaque fois que vous avez besoin d'écrire quelque chose, au lieu d'écrire l'intégralité du fichier à la fois?

EDIT: En fonction de votre mise à jour, voici en gros ce que vous avez à faire (probablement pas valide C puisque je ne suis pas un programmeur C):

EDIT2: Avec l'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* seperator = "xx"; 
char firstLine[BUFSIZE], secondLine[BUFSIZE]; 

// start a loop here 
fgets(firstLine, 200, firstFile); 
fgets(secondLine, 200, secondFile); 
// Remove '\n's from each line 

fprintf(outputFile, "%s%s%s", firstLine, seperator, secondLine); 
// end a loop here 

fclose(outputFile); 
fclose(firstFile); 
fclose(secondFile); 
+0

'sizeof (char)' est défini comme étant 1 ... – kennytm

+0

Je pensais qu'il serait plus clair de mettre dans ce que nous passons plutôt que nombres (puisque de cette façon, il est plus clair que le troisième argument est la taille de chaque chose à lire). –

+1

Il est idomatique d'utiliser 'BUFSIZ' pour un' char [] 'de longueur inconnue. J'utiliserais aussi 'fgets (char * buf, taille int, FILE * f)' car il s'arrête sur newline (qui devrait être coupé). Je sais que vous n'êtes pas un programmeur C donc c'est excusable;) – msw

0

Les fichiers sont sur le disque, malloc est pour la RAM. Vous ne pouvez utiliser malloc que si vous avez besoin d'espace dans la mémoire pour stocker les données avant d'écrire dans le fichier, sinon, vous utiliseriez généralement un buffer alloué par pile de say 8k pour écrire dans le fichier en morceaux.

Donc, en prenant votre question en l'état, non vous auriez rarement malloc juste pour écrire dans un fichier.

Si votre objectif est de conserver le fichier en mémoire, vous devez alors le fichier mallof sizeof.

1

Vous avez seulement besoin de malloc la taille entière d'un fichier si vous avez besoin de maintenir le fichier entier en mémoire (et même alors, vous pouvez probablement utiliser mmap ou quelque chose à 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.