我正在创建一个应用程序,它必须从文本文件中获取一些数据。问题是,我需要的数据是文本文件中的最后一行。有没有办法以某种方式阅读最后一行?我只需要最后一行内容。有人能帮助我吗?
由于
答案 0 :(得分:1)
这是一个快速而又脏的代码。它读取所有行以获取所有行的数量,将文件倒回到开头并再次读取行直到最后两行。最后读取最后一行但存储在变量lastLineButOne
中。
#include <stdio.h>
#define BUF 255
int getNoOfLines(FILE *f) {
int ctr=0;
char temp[BUF];
while(fgets(temp,BUF,f) != NULL)
ctr++;
return ctr;
}
int main() {
int i;
FILE *f=fopen("apps.txt","r");
char lastLineButOne[BUF];
char temp[BUF];
int noOfLines=getNoOfLines(f);
rewind(f);
for(i = 0; i < noOfLines-2; i++) {
fgets(temp,BUF,f);
}
fgets(lastLineButOne,BUF,f);
printf("%s",lastLineButOne);
fclose(f);
return 0;
}
答案 1 :(得分:1)
读取整个文件,保留两行,然后丢弃最后一行,例如:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int secondtolast(char *dst, size_t maxlen, FILE *h) {
char *line[2];
int i = 0;
line[0] = malloc(maxlen);
if (!line[0]) return 1;
*line[0] = 0;
line[1] = malloc(maxlen);
if (!line[1]) {
free(line[0]); /* return memory to the OS */
return 1;
}
*line[1] = 0;
while (fgets(line[i], maxlen, h)) i = !i;
strcpy(dst, line[i]);
free(line[0]);
free(line[1]);
return 0;
}
int main(void) {
char l2[8192];
if (secondtolast(l2, sizeof l2, stdin)) {
fprintf(stderr, "no memory");
}
printf("second to last line: %s", l2);
return 0;
}