将char型字符加入string对象后出现乱码

我在Linux下编写一个程序,从一个文件中每次读取一个字符,随后将它加入到一个string对象中:
char ch;
string my_str;
fstream my_code.open("xxx", ios::in);
while(判断条件)
{
my_code >> ch;
......(中间过程)
my_str.append(&ch);
cout << my_str;
my_str.clear();

}

程序粗略流程如上。现在发现第一次输出my_str时没有问题,以后再输出就会出现乱码。调试时发现每次通过append()函数追加一个字符后,my_str的长度增加2(2个字符长度为4,3个长度为6...)。
请教各位这是什么原因?是否与Linux下字符集有关?如何解决?

添加字符的操作有问题。
my_str.append(&ch);用的是basic_string& append(const CharT* s );这个函数原型,但是&ch并不是合法的字符串地址。
应该用下面的方法。
my_str.append(1, ch);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-20
string 就是char类型后面加一个“\0”;
比如:
string s="abc";
转成char数据类型:
char c1[]={'a', 'b', 'c', '\0'};
第2个回答  2013-03-20
my_str.append(&ch); 这句用的用问题
应该用
my_str.append(1,ch);

如:
#include<iostream>
#include<string>
using namespace std;
int main ()
{
string mystr("hello");
cout <<mystr<<endl ;
mystr.append(1,'a');
cout <<mystr<<endl ;
return 0;
}
相似回答