zhuwt2008
2018-06-24 01:02
采纳率: 95.1%
浏览 1.0k

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条回答 默认 最新

  • wodexinhao 2018-06-24 03:19
    已采纳

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

     const char* fn1(void)
    {
        std::string* rlt = new string();
        rlt->append("340604001640F4CFFA9A5EE84592083A3D1E0FFEA6B2F8CA6A48897EF664C7B8EF4DD7DFF76F6C951B16547");
        return rlt->c_str();
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • alvin3014 2018-06-24 01:48

    看下编码格式是否正确

    评论
    解决 无用
    打赏 举报
  • wodexinhao 2018-06-24 03:22

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

    评论
    解决 无用
    打赏 举报
  • 冲杯奶茶 2018-06-24 06:40

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题