在读文件使用getline时遇到的问题

 

以前读一个文件,经常使用的风格是

int read_file(const char *file)
{
//判断file是否为空,  此处省略
 const int LEN=1024;
 char text[LEN]="";
  ifstream fin(file);
//判断 fin 是否已打开, 否则退出。 此处省略
//下面按行读取文件
 while (!fin.eof()){
 if (fin.getline(text, LEN).good()==false()) //判断流是否正常
  break;
 //.....
 }
 

 但是遇到的问题就是,当我一行文件的长度超过定义的 LEN 的长度时,在getline以后就会出错,具体的信息可参照getline说明。为了防止 出现这种情况,我可以把 LEN 设置的大一些,但是多大才算大呢,你或者永远也估计不到一行中最多多少字符(同时你要考虑一下,是否太浪费空间)。当遇到这种情况的时候,那我们可以换用一下getline函数

原来的getline是 ifstream 类的成员函数, 要求参数是字符指针, 现在我们可以换成字符串

getline(fin, s)

int read_file(const char *file)
{
//判断file是否为空,  此处省略
// const int LEN=1024;
// char text[LEN]="";
 char *text=NULL;
 int len=0;
 string s;
 ifstream fin(file);
//判断 fin 是否已打开, 否则退出。 此处省略
//下面按行读取文件
 while (!fin.eof()){
  s.clear();
 if (getline(fin,s).good()==false()) //判断流是否正常
  break;
  //如果想按照字符串的形势处理这一行文件, 那我们就用指针来指向它
  len=s.length();
  text=new char[len+1];
//判断是否分配成功。省略
  bzero(text, len+1);
   strncpy(text, s.c_str(), len);
//.....
  delete []text; //别忘记释放空间
}
fin.close();
return 0;
}

 

 不过动态分配存储空间,应该速度会慢一些

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值