c - 段错误——无法将一个文件的内容写入另一个文件

标签 c file segmentation-fault fopen

我无法用 C 将一个文件的内容复制到另一个文件,因为发生了段错误,我不知道原因。

我知道这与 fgets 的语法或我提供缓冲区大小的方式有关。

char* argument = argv[2];
char buffer[argc + 1];

FILE *fp;
FILE *quiz_log;

fp = fopen(argument, "r+");
quiz_log = fopen("quiz.log", "a");

fgets(buffer, 80, fp);
memcpy("quiz.log", buffer, 80);

fclose(quiz_log);
fclose(fp);

预期:成功写入文件“quiz.log”

实际:段错误:11

最佳答案

argc 与文件大小无关,它是命令行参数的数量。所以没有理由将它用作缓冲区的大小。

与其尝试一次读取所有文件,不如使用固定大小的缓冲区并循环读取文件。使用 fread() 而不是 fgets(),因为它只读取一行。

您需要使用fwrite() 来写入输出文件,而不是memcpy()

#define BUFFER_SIZE 1000
char* argument = argv[2];
char buffer[BUFFER_SIZE];

FILE *fp;
FILE *quiz_log;

fp = fopen(argument, "r");
if (fp == NULL) {
    printf("Unable to open input file\n");
    exit(1);
}
quiz_log = fopen("quiz.log", "a");
if (quiz_log == NULL) {
    printf("Unable to open quiz.log\n");
    exit(1);
}
size_t n;
while ((n = fread(buffer, 1, BUFFER_SIZE, fp)) > 0) {
    fwrite(buffer, 1, n, quiz_log);
}

fclose(quiz_log);
fclose(fp);

关于c - 段错误——无法将一个文件的内容写入另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58176739/

相关文章:

C语言编程问题

database - 将测量数据保存到数据库或文件系统中

javascript - 使用 Javascript/PHP 的“另存为”框

使用 fseek 时 C 代码出现段错误

C 回文程序可以在本地 PC 上运行,但不能在 INGInious 上运行

c++ - 需要(构建?)Windows 7 64 位上的 eclipse 文件

c - 为什么 scanf() 会导致此代码中的无限循环?

在打印、转换中考虑 FPU 舍入模式的编译平台

python - 在Python中读取目录和子目录中的所有文件

c - 从 Linux 移植到 OSX 时,时间和 ctime 出现段错误