C++将string转为char*类型作为返回值乱码问题解决

const char* Fun(char* arg)
{
	std::string res = Cal(arg);
	//return res.data();
	//改为以下代码后正常:
	char *result = new char[res.length() + 1]; //定义需要返回的result对象
	for (int i = 0; i < res.length(); ++i)
	{
 	    result[i] = res[i];    //将string类型的res内容都放到result内
	}
	result[res.length()] = '\0'; //加上结束符
	return result;
}

解决参考文章地址:http://t.zoukankan.com/hqdong123-p-13252396.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将包含中文字符的 `std::string` 换为 `char*` 时,可能出现乱码问题。这是因为 `std::string` 内部使用的是 `char` 类型,而大部分编译器默认使用的是 ASCII 编码,无法正确处理中文字符。 要解决这个问题,您可以使用多字节字符集(Multibyte Character Set)的函数来进行换。以下是一个示例代码,演示如何将包含中文字符的 `std::string` 换为 `char*`: ```cpp #include <iostream> #include <string> #include <vector> #include <Windows.h> int main() { std::string str = "中文字符串"; int size_needed = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0); std::vector<wchar_t> buffer(size_needed); MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, buffer.data(), size_needed); int size_needed_mb = WideCharToMultiByte(CP_ACP, 0, buffer.data(), -1, NULL, 0, NULL, NULL); std::vector<char> buffer_mb(size_needed_mb); WideCharToMultiByte(CP_ACP, 0, buffer.data(), -1, buffer_mb.data(), size_needed_mb, NULL, NULL); char* converted_str = buffer_mb.data(); std::cout << converted_str << std::endl; return 0; } ``` 上述代码中,使用了 `MultiByteToWideChar` 函数来将 `std::string` 中的 UTF-8 字符串换为宽字符 `wchar_t`,然后再使用 `WideCharToMultiByte` 函数将宽字符换为多字节字符,在这里使用的是系统默认的 ANSI 编码(CP_ACP)。最终得到的 `char*` 类型换后字符串 `converted_str` 可以正常输出中文字符。 需要注意的是,这里的示例代码是在 Windows 平台下使用的,如果您在其他平台下开发,可能需要使用不同的函数和编码方式进行换。请根据您的开发环境和需求进行适当的调整。 希望这能帮助到您!如有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值