std::string 两个互相赋值 变乱码
时间: 2023-11-17 13:04:40 浏览: 252
这种情况可能是由于两个字符串的编码格式不同导致的。可以尝试使用相同的编码格式,或者使用转换函数进行转换。比如,如果一个字符串是 UTF-8 编码,另一个字符串是 GBK 编码,可以使用 iconv 函数进行转换。
示例代码:
```c++
#include <iostream>
#include <string>
#include <iconv.h>
int main() {
std::string str1 = "你好";
std::string str2 = "hello";
// 将 str1 转换为 GBK 编码
iconv_t cd = iconv_open("GBK", "UTF-8");
char* inbuf = const_cast<char*>(str1.c_str());
size_t inlen = str1.length();
size_t outlen = inlen * 2;
char* outbuf = new char[outlen];
char* outptr = outbuf;
iconv(cd, &inbuf, &inlen, &outptr, &outlen);
str1 = std::string(outbuf, outptr - outbuf);
delete[] outbuf;
iconv_close(cd);
// 将 str2 转换为 GBK 编码
cd = iconv_open("GBK", "UTF-8");
inbuf = const_cast<char*>(str2.c_str());
inlen = str2.length();
outlen = inlen * 2;
outbuf = new char[outlen];
outptr = outbuf;
iconv(cd, &inbuf, &inlen, &outptr, &outlen);
str2 = std::string(outbuf, outptr - outbuf);
delete[] outbuf;
iconv_close(cd);
// 互相赋值
str1 = str2;
str2 = str1;
std::cout << str1 << std::endl; // 输出 hello
std::cout << str2 << std::endl; // 输出 hello
return 0;
}
```
阅读全文