C语言使用技巧(三十二):读写txt文件指定行指定所有行类型数据
实现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----->9y
StrLine这里读取指定行------->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