为什么输出的string类内容是乱码

striveforit 2009-08-16 11:00:29
为什么程序显示的x.content是乱码?

void File<T,T1>::Printmainfile(char* fn1)
{ifstream fin(fn1,ios::in|ios::binary);
if(!fin)
{cerr<<fn1<<' '<<"没有找到!"<<endl;exit(1);}
T1 x;
fin.seekg(0,ios::end); //将文件指针移至文件未
int b1=sizeof(T1);
int n=fin.tellg()/b1; //用n表示文件所含的记录数
fin.seekg(0); //将文件指针移至文件首
for(int i=0;i<n;i++) {
fin.read((char*) &x, b1); //从文件中读出一条记录
// if(i%4==0) cout<<endl; //每行显示4个数据
cout<<x.num<<" "<<x.key<<endl; //能正确显示
std::cout<<(x.content); //x.content是string类,为什么程序不能正确显示出它的内容,而是别的乱码??
cout<<endl;
}
cout<<endl;
fin.close();
}
...全文
264 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysysbaobei 2009-08-16
  • 打赏
  • 举报
回复
顶下
老邓 2009-08-16
  • 打赏
  • 举报
回复
GCC?有中文?
setlocale(LC_ALL, "");
超gogo 2009-08-16
  • 打赏
  • 举报
回复
看样子你把内容存到了文件中,其实真正的保存等用处时用的是数据库,不会用文本文件之类的东西。
不必刻意的追求解决这种问题,实际应用中一般是不会这样的。

worldbankwolf 2009-08-16
  • 打赏
  • 举报
回复
关注
超gogo 2009-08-16
  • 打赏
  • 举报
回复
显示乱码是由于你的x.content没有读取正确。我以前遇到过相似的问题,按照计算没有问题,但是实际截取的文字会产生意想不到的结果
像汉字和英文的长度是不同的,比方说“我 饿了”(在输入法为英文状态下打的空格)
中文不止占一个字节的长度,理论上是占用两个,如果你从“我”后的空格开始的部分作为x.content。我作为“x.key ”。那么输出key的时候肯定没有问题,因为正确读出了文字,但是读content的时候,你的空格是英文状态下的,就会导致读取问题,产生乱码,如果将空格去掉就会正确的显示了。

或者在输入中文输入法的状态下打空格,再或者在英文状态下打两个空格。

我当时的问题就是这样解决的,希望能帮到你
striveforit 2009-08-16
  • 打赏
  • 举报
回复
请问,string类如何写入顺序文件中
adventurelw 2009-08-16
  • 打赏
  • 举报
回复
sizeof(T1)不能获取包含了string类型的真实长度
因为string是以指针操作的。

在写入的时候,就最好是分开写。
超gogo 2009-08-16
  • 打赏
  • 举报
回复
我没有说是文本文件啊。我只说文件啊,二进制文件,文本文件都是这样的问题
striveforit 2009-08-16
  • 打赏
  • 举报
回复
后面讲得好深奥,不懂,呵呵
我把string类写入二进制文件,不是文本文件。

ofs.write((char*)&e,e.content.size()+1);
我这样处理的

那string类的记录要怎么一条一条的读出并显示呢?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧