中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > C/C++
我要从文件infile中读一行,放到string类型的buffer中,这样对吗
作者:未知 时间:2005-09-13 19:28 出处:ChinaUnix.net 责编:chinaitpower
              摘要:我要从文件infile中读一行,放到string类型的buffer中,这样对吗

[code:1:697d91c69f]  while(infile.getline(const_cast<char* >(buffer.c_str())))[/code:1:697d91c69f]

 whyglinux 回复于:2004-04-14 16:21:14
不对!

string类提供一个c_str()成员函数,目的是为了得到string对象的一个C字符串,并且这个函数的返回值类型是 const 型的字符指针,目的是不能用这个指针来改变返回字符串(string类设计者的初衷)。如果你(用户)一定想通过改变这个返回的字符串从而而改变string对象的话,那你的想法就错了:这样做的结果是不确定的,你可能改变了string对象,也可能对string对象毫无影响,这跟string的具体实现有关。所以,试图通过 c_str 的返回指针来修改string对象,这种做法是愚蠢的。

你可以有多种方法达到修改string对象的目的,但是不要用c_str,他不是干这个用的。比如,你要把文件的一行内容读取到string类型的buffer中,可以有以下两种实现方法:

1. 额外定义一个字符数组,然后读取内容到这个字符数组中,再把字符数组的字符串传给buffer。
[code:1:edccd391d9] string buffer;
  char str[1024];
  infile.getline( str );
  buffer = str;
[/code:1:edccd391d9]
2. 较好的实现方法是用下面的方法。
[code:1:edccd391d9]  string buffer;
  getline( infile, buffer );
[/code:1:edccd391d9]
要判断文件是否结束,可以用 infile.eof()。

 dsprite 回复于:2004-04-14 20:14:38
用fgets也可以吧?

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有