C语言中 怎样读取一个文本文档中的特定位置的特定长度的字符

C语言中 怎样读取一个文本文档中的特定位置的特定长度的字符,第1张

你的这个result是什么应该是个文件

编写这样的程序主要用到(1)fopen函数,用于打开文件,返回一个文件指针,fwrite函数,写入文件(也就是你要的result文件),及fclose函数,文件 *** 作完时要关闭文件指针(2)fseek函数,用于文件指针的定位,也就是将文件指针放到你要 *** 作的文件中的某个位置(3)然后用的就是fread函数,用于读取一块数据,你可以指定数据的长度,没有什么技术可言的,自己查一下这几个函数的原型就会明白了

我测试了你的代码:

#include<stdioh>

#include<stringh>

#include<stdlibh>

void main()

{

FILE p=fopen("d:\\jiuibftxt","rt");

int length = 0;

for(;fgetc(p)!=EOF;length++);

fclose(p);

printf("第一种方式,文件长度=%d\n",length);

p=fopen("d:\\jiuibftxt","rb");

fseek(p,0,2);

length=ftell(p);

fclose(p);

printf("第二种方式,文件长度=%d\n",length);

}

文本文件的内容是:

FILE p=("jiuibftxt","rt");

int length;

for(;fgetc(p)!=EOF;length);

FILE p=(jiuibftxt","rb");

int length;

fseek(p,0,2);

length=ftell(p);

程序的输出是:

原因分析:

在windows下,以文本方式写入文件的\n会被转换为\r\n(也就是0x0D0A),输出的时候,\r\n会被转换回\n。

fgetc在读入时会将\r\n转换成一个\n;上面的文本文件有6个回车换行。

所以第一种方式比第二种方式少6

C语言获得文件的长度方式就是第二种:

FILEfp;

fp=fopen("localfile","rb");// localfile文件名

fseek(fp,0,SEEK_SET);

fseek(fp,0,SEEK_END);

long longBytes=ftell(fp);// longBytes就是文件的长度

int fseek(FILE stream, long offset, int fromwhere):

这个函数,将文件指针stream移至以fromwhere为基准,偏移offset个字节的位置。常用的fromwhere有SEEK_SET(文件首地址,0),SEEK_CUR(文件指针当前位置, 1),SEEK_END (文件结束位置,2)。

long ftell(FILE stream):

该函数返回文件指针stream相对于文件首地址的偏移字节数。

可以先利用fseek与ftell求出文件大小,再一次性进行读取。代码如下:

#include <stdioh>

#include <stdlibh>

#include <stringh>

int main(void)

{

FILE fp = fopen("atxt", "r");

char str;

int len;

fseek(fp, 0, SEEK_END); //指向文件尾地址 

len = ftell(fp); //计算文件长度 

fseek(fp, 0, SEEK_SET); //恢复至文件指针至首地址 

str = (char)malloc(len  sizeof(char)); //申请文件长度的内存 

    if(str != NULL) 

    {

     fread(str, len  sizeof(char), 1, fp); //一次性读入 

     printf("%s", str);

     free(str);  

    }

    return 0;

}

以上就是关于C语言中 怎样读取一个文本文档中的特定位置的特定长度的字符全部的内容,包括:C语言中 怎样读取一个文本文档中的特定位置的特定长度的字符、C语言获取txt文件大小两种方法的差异、请教C语言如何提取未知长度txt文件的内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10128998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存