gpt4 book ai didi

c - 我不明白 fgets 如何创建段错误

转载 作者:行者123 更新时间:2023-11-30 15:14:08 24 4
gpt4 key购买 nike

我有一个任务要编写一个程序,该程序复制两个参数(文件路径)并将第一个文件复制到第二个文件中。据我所知,我应该使用 fgets 。我所拥有的似乎有效,直到最后我无法检测到文件的结尾。根据我读过的所有内容,似乎 fgets 应该在到达文件末尾并返回 null 或其他内容时停止,但如果我让它继续读取文件的最后一行。这是代码。我不需要答案(这是作业),我只想了解我在做什么,这样我就可以自己得到答案:

#include <stdio.h>
#define BUFFER_SIZE 80

int readLineFromFile(FILE* file, char* buffer) {

if(! *fgets(buffer, BUFFER_SIZE, file)) {
return -1;
}
int length;
for(length=0; buffer[length] != '\0'; length++);
return length;
}

void writeLineToFile(FILE* file, char* buffer) {
fprintf(file, "%s", buffer);
}

int main(int argc, char **argv) {
if (argc != 3) {
printf("incorrect number of arguments, 2 text files expected, recieved %d\n", argc - 1);
return 0;
}
FILE* input = fopen(argv[1], "r");
FILE* output = fopen(argv[2], "w");
char buffer[BUFFER_SIZE];
int charsRead = readLineFromFile(input, buffer);
int i;
while(0 < charsRead) {
writeLineToFile(output, buffer);
charsRead = readLineFromFile(input, buffer);
printf("%d\n", i++);
}
fclose(input);
fclose(output);
return 0;
}

最佳答案

我认为问题在于 if(! *fgets(buffer, BUFFER_SIZE, file)) { 中的函数取消引用。我将 *fgets 更改为 fgets 并且运行良好。查看正确代码here 。但为了获得额外的积分,请弄清楚如何使其适用于任何文件类型,而不仅仅是纯文本。

关于c - 我不明白 fgets 如何创建段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34168506/

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