gpt4 book ai didi

复制二进制文件 - C 编程中的源文件和目标文件

转载 作者:行者123 更新时间:2023-11-30 20:23:06 25 4
gpt4 key购买 nike

大家好,我制作了一个复制二进制文件的程序,但我有一个问题:当我尝试将源文件的字段复制到目标文件时,它会删除目标文件的所有字段。我怎么解决这个问题?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv)
{
FILE *source, *target;
const size_t buffer_size = 8192;
char buffer[100];
int strint[100];
int a;

source = fopen(argv[1], "rb");


if (source != NULL)
{
return -1;
}

target = fopen(argv[2], "w+b");

while (1)
{
a = fread(buffer, sizeof(char), buffer_size, source);

if (!feof(source))
{
fwrite(buffer, sizeof(char), buffer_size, target);
}
else
{
break;
}

}

fclose(target);
fclose(source);
system("pause");
return 0;

}

最佳答案

  1. 您将 buffer_size 声明为 8192,但您只分配了 100 个字符,而不是 buffer_size。所以改变声明。此外,常量通常全部大写。

  2. 您需要将 a 个字节写入目标文件,而不是 buffer_size,因为该文件甚至可能不是 buffer_size 个字符!

  3. 检查fopen的返回值;失败时返回NULL。查看 strerror 以打印错误原因。

  4. 你的循环是错误的。只需在 fread 返回 BUFSIZE 时循环(即 fread 读取 BUFSIZE 字符)。

  5. 永远不要使用system,因为它非常不可移植。

修改后的方案是

FILE *Fopen(const char *filename, const char *mode)
{
FILE *fp;

if ((fp = fopen(filename, mode)) == NULL) {
strerror("fopen");
exit(EXIT_FAILURE);
}
return fp;
}
int main(int argc, char **argv)
{
const size_t BUFSIZE = 8192;

FILE *src, *dest;
char buf[BUFSIZE];
size_t n;

src = Fopen(argv[1], "rb");
dest = Fopen(argv[2], "w+b");

while ((n = fread(buf, 1, BUFSIZE, src)) > 0)
fwrite(buf, 1, n, dest);

fclose(src);
fclose(dest);
return 0;
}

我还没有测试过代码,所以如果有问题请告诉我。

关于复制二进制文件 - C 编程中的源文件和目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37082507/

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