请教C语言如何提取未知长度txt文件的内容

一个txt文件中存有字符串 要全部取出放在字符数组str中,请教如何操作 用fgets函数的话不说需要知道个数n么?

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 <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(void)
{
FILE* fp = fopen("a.txt", "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;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-20
fseek这个函数知道不,将文件指针指向文件尾。
fseek(文件指针,0,SEEK_END);
int length = ftell(文件指针);
fseek(文件指针,0,SEEK_SET);//将文件指针返回到文件头
现在可以读写了,length就是你需要的n
............本回答被提问者和网友采纳
第2个回答  2013-06-20
如果是ASCII字符方式(包括国标汉字内码的ANSI模式)存储的TXT文件,直接用API读文件长度即可,如果是数据流则检索到非法字符即结束。如果是UNICODE方式的TXT,那么还要过滤掉文件开头的标志字段,并将16位的数据编码转换为你需要的字符编码。
相似回答