实现demo代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>char* ReadSpeacialLine(int i)
{ FILE *fp; int size = 0; char *ar ; int num = 40;int WhichLine=i; //指定要读取哪一行int CurrentIndex=0; //当前读取的行char StrLine[num]; //每行最大读取的字符数//二进制方式打开文件 char filename[] = "./lining.txt";if((fp = fopen(filename,"rb")) == NULL) { printf("Error:Open input.c file fail!\n"); return NULL; } //求得文件的大小 fseek(fp, 0, SEEK_END); size = ftell(fp); printf("文件的大小size------>:%d\n",size);rewind(fp); //申请一块能装下整个文件的空间 ar = (char*)malloc(sizeof(char)*size); //读文件 控制读取的流// fread(ar,2,10,fp);//把fp里面的值读到ar里面,每次读一个,共读10次 // printf("%s\n",ar); while (!feof(fp)){if (CurrentIndex==WhichLine){fgets(StrLine,num,fp); //读取一行printf("StrLine这里读取指定行------->%s\n", StrLine); //输出return StrLine;}fgets(StrLine,num,fp); //读取一行,并定位到下一行CurrentIndex++;printf("这里显示读取所有前面行StrLine----->%s\n", StrLine); //输出}fclose(fp); free(ar); // printf("按任意键继续"); // getchar(); // getchar(); return NULL;
} int main(){// char *p;// p=ReadSpeacialLine(4); ReadSpeacialLine(10) ;return 0;
}
执行结果:
gcc freads.c -o freads && ./freads
freads.c: In function ‘ReadSpeacialLine’:
freads.c:48:21: warning: function returns address of local variable [-Wreturn-local-addr]48 | return StrLine;| ^~~~~~~
文件的大小size------>:54
这里显示读取所有前面行StrLine----->-10这里显示读取所有前面行StrLine----->13这里显示读取所有前面行StrLine----->12这里显示读取所有前面行StrLine----->23这里显示读取所有前面行StrLine----->4这里显示读取所有前面行StrLine----->35这里显示读取所有前面行StrLine----->6这里显示读取所有前面行StrLine----->70这里显示读取所有前面行StrLine----->8x这里显示读取所有前面行StrLine----->9yStrLine这里读取指定行------->10
其中的txt文件内容为:
-10
13
12
23
4
35
6
70
8x
9y
10
11m
12
133
146
15
-106
参考文献:
https://blog.csdn.net/qq_37668377/article/details/103722766
https://www.cnblogs.com/kissazi2/archive/2012/10/29/2744153.html
https://blog.csdn.net/weixin_41194129/article/details/10880631750