大华笔试题.读写文件---是不是有bug啊?

http://hi.baidu.com/i_foresee_u/item/d85cacf585327adb531c26ad

题目:

输入一个文件名列表,把这些文件打包生成一个目标文件。所生成的目标文件包含各个输入文件的信息,包括文件名,文件长度,各个文件的数据在目标文件的位置等信息,具体格式自己定义。函数声明如下:int fpack(const char *flist[], const char *dstfile),其中,flist为文件名列表,以NULL为结束,比如{"file1.txt”,"file2.txt”,"file3.txt”...NULL};  detfile为打包生成的目标文件名,成功返回0,失败返回-1

struct FILEINFO
{
 char name[20];
 char size[10];
    char addr[256];
};

#define MAX_SIZE 2048
int fpack(const char *flist[], const char *dstfile)
{
 char readBuf[MAX_SIZE]; 
 memset(readBuf, 0, sizeof(readBuf));
 int filesize = 0;//某个文件的大小
 int len = 0; //读取内容的长度
 FILEINFO fileInfo;

 FILE *fout = fopen(dstfile, "a+");
 if(fout == NULL)
 {
  printf("%d fopen file %s failed\n", __LINE__, dstfile);
  return -1;
 }

 FILE *fin;  
 int i = 0;
 while(flist[i] != NULL)
 {
  memset(&fileInfo, '0', sizeof(FILEINFO));
  fin = fopen(flist[i], "r");
  if(fin == NULL)
  {
   printf("%d fopen file %s failed\n", __LINE__, flist[i]);
   return -1; 
  }


  while((len =  fread(readBuf, sizeof(char), MAX_SIZE, fin)) > 0)
  {
   filesize +=len;
   memset(readBuf, 0, sizeof(readBuf));
   len = 0;
  }
  strcpy(fileInfo.addr, flist[i]);
  strcpy(fileInfo.name, flist[i]);
  sprintf(fileInfo.size, "%d", filesize);
  fwrite(&fileInfo, sizeof(FILEINFO), 1, fout);

  printf("The file:%s's size is %d.\n", flist[i], filesize);
  fclose(fin);
  i++;
 }
 printf("fileNum = %d\n", i);//文件的个数
 fclose(fout);

 return 0;
}

int main(int argc, char* argv[])
{

    const char *flist[] = {"in0.txt", "in1.txt", "in2.txt", "in3.txt", "in4.txt", NULL};
 printf("%d, %d\n",sizeof(flist),sizeof(flist)/sizeof(flist[0]));
 fpack(flist,"out.txt");

 return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值