#include <windows.h> #include "string" using namespace std; void main() { string a = "123163jjj"; cout << "测试:" << getleft(a,3) << "\n" << endl; } string * getleft(string zstr, int zlen) //使用string类截取字符串左边 { string tem = zstr.substr(0, zlen); return &tem; }
像上面这样写,为什么得不到正确的返回值啊,求指导
解决方案
10
以为函数getleft()执行完成后,tem就自动释放了,虽然你返回的是tem地址,但是这是无效的地址,所以你可能得不到正确的字符串。
60
试试这样:
#include <iostream> #include <string> using namespace std; string *getleft(string zstr, int zlen); void main() { string a = "123163jjj"; cout << "测试:" << *(getleft(a, 3)) << "\n" << endl; } string *getleft(string zstr, int zlen) //使用string类截取字符串左边 { string *tem = new string(zstr.substr(0, zlen)); return tem; }
10
需要,有new出来的指针要delete释放掉,要多深入理解内存的知识