C++中string转换为char*类型返回后乱码问题解决

2020-07-06 12:00:14王冬梅

我们知道函数的函数栈知识点,栈内存放着函数入口地址,局部变量,返回地址等,我猜测result作为要被返回的对象其内存空间应该是不随着函数一起被释放的,也就是主函数内的返回值应该还是用那块内存,经过测试这个结论是对的。主函数中的变量的确是使用返回值那块内存。

到这里就发现了,虽然执行char* result=(char*)res.c_str()语句能让result内是完整的结果内容(也就是转换完成),但result会随着string类型的res的释放而导致char*类型的result所指向的内存空间内容全部清空。最后虽然返回了result所指的空间但里面的内容早就被清空了。就好比把内存比作一块地,res先在其上面盖了一座房子,而使用上面转换语句后result也是房子的主人,这下房子有了两个主人,他们都能对房子进行操作。正因为他们都能进行操作,当他们所属函数结束也就是res大限到来之时,res将自己建立的房子销毁了。那么result也就没有房子可住了。也就是他们公用的那片内存被初始化,这时主函数虽然收到了返回地址但那片地址已经没有内容了。也就导致乱码了。

到这里,问题的根源就知道了,那么解决方法也就很明显了:1.内存分离,将res和result的所属内存地址分开。2.或者想办法让res所在内存不随着函数结束而释放.

具体实现:

第1种.上面那段new新建char*变量的代码。为result重新开辟一段空间。

第2种.i:若在类里:将res设为类的成员变量或者static成员变量(最好不要,能成功但会有新问题出现),他们都不会随着成员函数的结束而释放。区别就是普通成员变量会随着对象的释放而释放,static不会,它是存放在静态存储区

ii:若是像C这类面向过程代码就是将res设为全局变量即可

到此这篇关于C++中string转换为char*类型返回后乱码问题解决的文章就介绍到这了,更多相关C++中string转换为char*类型乱码内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!