例子:
const char * aaa(string str){
string tmp = str.substr(0,5);
return tmp.c_str();
}
const char * bbb(string str){
string tmp = str.substr(6);
return tmp.c_str();
}
string str = "Hello World";
const char * ss = aaa(str);
const char * tt = bbb(str);
结果是ss="World", tt="World",但我的期望是ss="Hello", tt="World",不知道为什么。我想要 aaa() 和 bbb() 返回“const char*”。
最佳答案
使用
return tmp.c_str();
是不对的。它会在 main
中导致上游的未定义行为。
您应该将aaa
更改为:
std::string aaa(string str){
return str.substr(0,5);
}
您应该类似地更改 bbb
。
虽然这些修复会很好,但期望 str
会改变是没有根据的。
两个函数都按值接受它们的参数。它们都不能修改
main
中的原始对象。这两个函数都不更改输入参数。当您调用
str.substr(0, 5);
时,它们会构造一个新的string
。
关于C++:我用不同的位置两次调用一个字符串 substr,转换为 const char *,它们返回相同,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35472404/