一般来说,我对 C 和内存分配都很陌生。基本上我要做的是复制未知大小的输入文件的内容并使用递归反转它的内容。我觉得我很接近,但是当我尝试输入我认为是文件的反转内容的内容时,我一直遇到分段错误(我认为是因为我认为我做对了...... )
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int recursive_back(char **lines, int lineNumber, FILE *input) {
char *input_line = malloc(sizeof(char) * 1000);
lines = realloc(lines, (lineNumber) * 1000 * sizeof(char));
if(fgets(input_line, 201, input) == NULL) {
*(lines + lineNumber) = input_line;
return 1;
}
else {
printf("%d\n", lineNumber);
return (1+recursive_back(lines, ++lineNumber, input));
}
}
void backward (FILE *input, FILE *output, int debugflag ) {
int i;
char **lines; //store lines in here
lines = malloc(1000 * sizeof(char *) ); //1000 lines
if(lines == NULL) { //if malloc failed
fprintf(stderr, "malloc of lines failed\n");
exit(1);
}
int finalLineCount, lineCount;
finalLineCount = recursive_back(lines, 0, input);
printf("test %d\n", finalLineCount);
for(i = finalLineCount; i > 0; i--) {
fputs(*(lines+i), output); //segfault here
}
}
我正在使用一个简单的输入文件来测试代码。我的输入文件有 6 行长,上面写着“这是一个测试输入文件”。实际输入文件正在另一个函数中打开并传递给后向函数。我已经验证了我的程序中的其他功能可以正常工作,因为我一直在使用不同的选项。这两个功能是我唯一遇到问题的功能。我究竟做错了什么?