【发布时间】:2023-03-06 00:55:01
【问题描述】:
我无法在 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+1作为缓冲区的大小?这只是命令参数的数量,而不是数据的长度。它可能很小,例如 2 或 3。但是您使用fgets(buffer, 80, fp)将最多 80 个字符读入缓冲区。 -
memcpy("quiz.log", buffer, 80);完全没有意义。 -
复制文件不用
fgets(),不用逐行读取。使用fread()。 -
我正在尝试获取文件的大小并分配一个比文件大一字节的缓冲区
-
argc与文件大小有什么关系?这是参数的数量。
标签: c file segmentation-fault fopen