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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将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);
参考技术A string 就是char类型后面加一个“\0”;
比如:
string s="abc";
转成char数据类型:
char c1[]='a', 'b', 'c', '\0';
参考技术B 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;

int数组和char数组的问题

int a[]=1,2,3,4输入的是地址。。。
但是 char a[]='H','e','r','o'
输出的却是Hero加乱码

这是为什么?

附:如果能告诉我为什么会出现中文乱码就更好了,如果是因为没有结尾符,直接就禁止编译就好了啊

是因为没有结尾的'\0'
字符串后面的部分内存内容存放的代码恰好是中文字符 所以就显示中文了
记得我以前调试程序的时候经常出现“烫”这个字 呵呵
参考技术A char数组是特殊处理的。 禁止编译?。。编译器的能力是有限的, 程序的对错更多时候必须依靠程序员自己来判断。 参考技术B char a[]='H','e','r','o';
你作为整型数组声明的
打印:
int i;
for (i=0;i<4;i++) printf("%c",a[i]);

for (i=0;i<4;i++) printf("%d ",a[i]);

以上是关于将char型字符加入string对象后出现乱码的主要内容,如果未能解决你的问题,请参考以下文章

int数组和char数组的问题

C语言 字符串输出时最后出现乱码

springmvc完成ajax功能以及返回字符串出现乱码的解决方法

C++中用writeconsole函数往控制台写字符串出现乱码,求救!

delphi中SQL文取出的汉字为乱码

c语言char输出乱码