Segmentation Fault-无法将一个文件的内容写入另一个文件

问题描述 投票:0回答:1

我无法在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

c file segmentation-fault fopen
1个回答
0
投票

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);
© www.soinside.com 2019 - 2024. All rights reserved.