gpt4 book ai didi

c - 如何在c中将一个二进制文件写入另一个文件

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:55 27 4
gpt4 key购买 nike

我有几个二进制文件要写入输出文件。所以我写了这个函数,使用 char 作为缓冲区,天真地认为它会起作用。

//Opened hOutput for writing, hInput for reading

void faddf(FILE* hOutput, FILE* hInput) {
char c;
int scan;
do{
scan = fscanf(hInput, "%c", &c);
if (scan > 0)
fprintf(hOutput, "%c", c);
} while (scan > 0 && !feof(hInput));
}

执行此函数会在开始的二进制文件中输出一些可读的 char。所以我这样尝试:

void faddf(FILE* hOutput, FILE* hInput) {
void * buffer;
int scan;
buffer = malloc(sizeof(short) * 209000000);
fread(buffer, sizeof(short), 209000000, hInput);
fwrite(buffer, sizeof(short), 209000000, hOutput);
free(buffer);
}

这个“有效”,但只有当文件小于我的“魔数(Magic Number)”时才有效。有更好的方法吗?

最佳答案

尽管您的新代码(在 the answer 中)比旧代码好得多,但它仍然可以改进和简化。

具体来说,您可以通过分块复制文件来避免任何内存问题。

void faddf( FILE *fpout, FILE *fpin )
{
char buffer[4096];
size_t count;

while ( (count = fread(buffer, 1, sizeof buffer, fpin)) > 0 )
fwrite(buffer, 1, count, fpout);
}

关于c - 如何在c中将一个二进制文件写入另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34352801/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com