怎么将文件内部指针归位c语言,C语言,问一下本人想将一个文件内的数据读到一个字符串指针,本人该怎么给这个指针分配内存呢,就算一开始分配200...

仅供参考:

//将c:\tmp文件夹下的全部文件的内容全部放到用malloc分配的内存中

#include 

#include 

#include 

#include 

struct FB {

char fn[256];

size_t fl;

char *b;

struct FB *next;

struct FB *prev;

} *fh,*fb,*ft;

char ln[256];

char fpn[256];

FILE *af;

FILE *f;

int L,n;

int main() {

system("dir /b /a-d c:\tmp\*.* >c:\allfn.txt");

af=fopen("c:\allfn.txt","r");

if (NULL==af) {

printf("Can not open file c:\allfn.txt!\n");

return 1;

}

fh=NULL;

fb=NULL;

n=0;

while (1) {

if (NULL==fgets(ln,256,af)) break;

L=strlen(ln);

if ("\n"==ln[L-1]) ln[L-1]=0;

printf("read %s\n",ln);

strcpy(fpn,"c:\tmp\");

strcat(fpn,ln);

ft=(struct FB *)malloc(sizeof(struct FB));

if (NULL==ft) {

printf("Can not malloc ft!\n");

fclose(af);

return 2;//之前的malloc在main退出后由操作系统自动free

}

printf("ft[%d]==%p\n",n,ft);

strcpy(ft->fn,fpn);

f=fopen(fpn,"rb");

if (NULL==f) {

printf("Can not open file %s!\n",fpn);

fclose(af);

return 3;//之前的malloc在main退出后由操作系统自动free

}

ft->fl=_filelength(fileno(f));

ft->b=malloc(ft->fl);

if (NULL==ft->b) {

printf("Can not malloc ft->b!\n");

fclose(f);

fclose(af);

return 4;//之前的malloc在main退出后由操作系统自动free

}

printf("ft[%d]->b==%p\n",n,ft->b);

if (ft->fl!=fread(ft->b,1,ft->fl,f)) {

printf("fread error!\n");

fclose(f);

fclose(af);

return 5;//之前的malloc在main退出后由操作系统自动free

}

fclose(f);

ft->next=NULL;

if (NULL==fh) {

ft->prev=NULL;

fh=ft;

} else {

fb->next=ft;

ft->prev=fb;

}

fb=ft;

n++;

}

fclose(af);

printf("--list--\n");

for (ft=fh;NULL!=ft;ft=ft->next) {

printf("%8d %s\n",ft->fl,ft->fn);

if (NULL!=ft) fb=ft;

}

printf("--free--\n");

n--;

if (NULL!=fh) {

for (ft=fb->prev;NULL!=ft;ft=ft->prev) {

if (NULL!=ft->next->b) {

printf("ft[%d]->b==%p\n",n,ft->next->b);

free(ft->next->b);

}

if (NULL!=ft->next) {

printf("ft[%d]==%p\n",n,ft->next);

free(ft->next);

}

n--;

}

if (NULL!=fh->b) {

printf("ft[0]->b==%p\n",fh->b);

free(fh->b);

}

printf("ft[0]==%p\n",fh);

free(fh);

}

return 0;

}

//C:\tmp\tmp\Debug>dir /a-d c:\tmp

// 驱动器 C 中的卷是 C_HD5_1

// 卷的序列号是 1817-D526

//

// c:\tmp 的目录

//

//找不到文件

//

//C:\tmp\tmp\Debug>tmp

//找不到文件

//--list--

//--free--

//

//C:\tmp\tmp\Debug>dir /a-d c:\tmp

// 驱动器 C 中的卷是 C_HD5_1

// 卷的序列号是 1817-D526

//

// c:\tmp 的目录

//

//2011-06-30  18:04            44,840 my_c.rar

//2011-06-30  17:18             1,036 err.frm

//2011-06-30  14:32            14,243 出租.txt

//2011-06-28  12:08            23,681 MSDN98书签.txt

//             4 个文件         83,800 字节

//             0 个目录 17,041,870,848 可用字节

//

//C:\tmp\tmp\Debug>tmp

//read my_c.rar

//ft[0]==00421800

//ft[0]->b==00520068

//read err.frm

//ft[1]==00421670

//ft[1]->b==0052AFC0

//read 出租.txt

//ft[2]==00421530

//ft[2]->b==00378F28

//read MSDN98书签.txt

//ft[3]==004213F0

//ft[3]->b==0052B3F8

//--list--

// 44840 c:\tmp\my_c.rar

//  1036 c:\tmp\err.frm

// 14243 c:\tmp\出租.txt

// 23681 c:\tmp\MSDN98书签.txt

//--free--

//ft[3]->b==0052B3F8

//ft[3]==004213F0

//ft[2]->b==00378F28

//ft[2]==00421530

//ft[1]->b==0052AFC0

//ft[1]==00421670

//ft[0]->b==00520068

//ft[0]==00421800

//

//C:\tmp\tmp\Debug>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值