C 这就是问题所在!

C 这就是问题所在!,c,file,file-io,malloc,C,File,File Io,Malloc,创建要写入的文件时是否需要malloc 该文件将基于其他2个文件的内容,因此我是否需要为sizeof(文件a)+sizeof(文件b)+1的可写文件分配malloc空间 对不起,如果这没有意义;如果没有,那么我想我需要多读一些:D 基本上,我有2个txt文件和一个字符串序列-我写每个文件的每一行并排由字符串序列分隔 txt file a hello stack over flow this is a test txt file b jump the gun i am a novice

创建要写入的文件时是否需要malloc

该文件将基于其他2个文件的内容,因此我是否需要为
sizeof(文件a)+sizeof(文件b)+1的可写文件分配malloc空间

对不起,如果这没有意义;如果没有,那么我想我需要多读一些:D

基本上,我有2个txt文件和一个字符串序列-我写每个文件的每一行并排由字符串序列分隔

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

如果你是按顺序写的,你能不能在需要写东西的时候用
fprintf()
fwrite()
而不是一次写整个文件

编辑:根据您的更新,这里基本上是您必须做的事情(可能不是有效的C,因为我不是C程序员):

编辑2:在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);

文件在磁盘上,malloc用于RAM

如果在写入文件之前需要内存中的空间来存储数据,则只能使用malloc,否则,通常会使用堆栈分配的缓冲区(比如8k)来成批写入文件

所以,按原样回答您的问题,不,您很少只需要写一个文件就可以了


如果您的目标是完整地将文件保存在内存中,那么您可以使用malloc sizeof file。

如果您需要将整个文件保存在内存中,您只需要
malloc
文件的整个大小(即使这样,您也可以使用
mmap
或其他方法)。为要在内存中使用的数据分配所需的内存:不多也不少。

文本文件还是二进制文件?你正在合并两个文件吗?你必须更好地说明你的目的。处理文件不一定涉及使用“malloc”,因此它取决于您的实际用例/目的。基本上,我有2个txt文件和一个字符串序列-我正在用字符串序列将每个文件的每一行并排书写。我将温和地建议您在K&R中查看一些材料,这样会更清楚。(提示:从头开始,一直到现在)我想输入我们实际传递的内容比输入数字更清楚(因为这样,第三个参数是要读取的每个内容的大小更清楚)。对于长度未知的
char[]
,使用
BUFSIZ
是一种自动的方法。我还将使用
fgets(char*buf,int size,FILE*f)
,因为它在换行时停止(这需要被截断)。我知道你不是C程序员,所以这是情有可原的;)啊,我刚刚删除了那个部分,因为我不知道怎么做。我现在就修。有两个警告:1。fgets还读取新行字符。因此,在打印“%s%s%s”时,您不会将所有内容都放在同一行中。2.事实上,您还需要一个循环才能将最长文件的剩余部分复制到输出文件。谢谢,我只使用单行文件对其进行了测试。