К malloc или не к malloc, вот в чем вопрос! - PullRequest
1 голос
/ 05 марта 2010

Нужно ли использовать malloc при создании файла для записи?

Файл будет основан на содержимом 2 других файлов, поэтому мне понадобится малокловое пространство для файла для записи sizeof( file a ) + sizeof( file b) + 1?

Извините, если это не имеет смысла; если этого не произойдет, тогда я думаю, что мне нужно прочитать еще немного: D

По сути, у меня есть 2 текстовых файла и последовательность строк - я пишу каждую строку каждого файла бок о бок, разделенные последовательностью строк.

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

Ответы [ 3 ]

1 голос
/ 05 марта 2010

Вам нужно только malloc весь размер файла, если вам нужно хранить весь файл в памяти (и даже тогда вы, вероятно, можете использовать mmap или что-то другое). Выделите столько памяти, сколько вам нужно для данных , с которыми вы собираетесь работать в памяти: не больше, не меньше.

1 голос
/ 05 марта 2010

Если вы пишете это по порядку, вы не можете просто использовать fprintf() или fwrite() всякий раз, когда вам нужно что-то записать, вместо того, чтобы записывать весь файл сразу?

РЕДАКТИРОВАТЬ:Основываясь на вашем обновлении, вот в основном то, что вы должны сделать (вероятно, не действительный C, так как я не программист C):

EDIT2: С некоторой помощью 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 голосов
/ 05 марта 2010

Файлы находятся на диске, malloc - для оперативной памяти.

Вы будете использовать malloc только в том случае, если вам нужно пространство в памяти для хранения данных ДО записи в файл, в противном случае, как правило, вы используетевыделите из буфера, скажем, 8k, чтобы записать в файл кусками.

Итак, принимая ваш вопрос как есть, нет, вы редко используете malloc для записи в файл.

Если ваша цельчтобы сохранить файл в памяти в завершение, тогда вы получите malloc sizeof файла.

...