实现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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
执行结果:
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—–>9y
StrLine这里读取指定行——->10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
其中的txt文件内容为:
-10
13
12
23
4
35
6
70
8x
9y
10
11m
12
133
146
15
-106
————————————————
版权声明:本文为CSDN博主「源代码杀手」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41194129/article/details/123395989
本文出自:http://www.36dsj.com/13699.html