zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言使用技巧(三十二):读写txt文件指定行指定所有行类型数据

C语言文件数据 技巧 类型 所有 指定 读写
2023-09-14 09:09:14 时间

实现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