vc++2015字符串开头为什么总是乱码?调试断点显示的值是正常的

代码如下,输出是字符串开头几个字符都变成乱码,且每次都是不一样的乱码,乱码第一个字符是“衰”,但是调试断点显示的值是正常的,不知道是怎么回事?怎么解决?
#include <string>
#include <ostream>

const char* fn1(void)
{
std::string rlt;
rlt.append("340604001640F4CFFA9A5EE84592083A3D1E0FFEA6B2F8CA6A48897EF664C7B8EF4DD7DFF76F6C951B16547");
return rlt.c_str();
}
int main(int argc, char *argv[])
{
std::cout << fn1();
std::cout << "abd";
return 0;
}
实际应用中这个函数是给c#调用的,同样前面几个字符变成乱码,后面正常,高手不啬赐教哦,感谢!

4个回答

看清楚你的函数返回类型是 一个指针,请用new 一个 内存地址然后返回,你返回的是 局部变量的内存地址,不是乱码才怪,你可以传入变量的方式来赋值,或者使用全局变量,或者使用指针

 const char* fn1(void)
{
    std::string* rlt = new string();
    rlt->append("340604001640F4CFFA9A5EE84592083A3D1E0FFEA6B2F8CA6A48897EF664C7B8EF4DD7DFF76F6C951B16547");
    return rlt->c_str();
}
hi_mingyi
hi_mingyi 你的函数返回类型是 一个指针,
接近 2 年之前 回复
zhuwt2008
zhuwt2008 是的,昨天还在奇怪程序另一个地方怎么写怎么不像以前一样出错,今天就在为这个问题头疼,错误的写法毕竟的错误的写法,看来理论基础还是要多回顾才行
接近 2 年之前 回复

看下编码格式是否正确

weixin_42533734
weixin_42533734 再审heyixia
接近 2 年之前 回复

基本功不行,好好打好基础吧,什么是局部变量,什么是全局变量,什么是指针,先弄清楚,返回局部变量的内存地址会有什么后果,好好学习一下吧

你返回的是局部变量的内存地址

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐