当我调用下面的函数时,我收到一个无效的指针错误。为什么会这样?
void Get(const char* value)
{
string st("testing string");
string val = st.substr(1, st.length());
value = val.c_str();
}
int main()
{
const char *val = NULL;
GetVal(val);
cout<<val;
}
目标是返回子字符串。
答案 0 :(得分:8)
val
内的Get()
变量在Get()
返回后被销毁,因此指向val
正文的指针变为无效。此外,value
参数是原始指针的副本,因此val
函数中的原始main()
指针保持不变,并且仍保留空指针值。
将其更改为
string Get()
{
string st("testing string");
string val = st.substr(1, st.length());
return val;
}
答案 1 :(得分:2)
我看到两个错误:
val.c_str()
分配给GetVal()
; val
在GetVal()
的末尾被销毁,因此指针值无论如何都会无效。答案 2 :(得分:1)
首选使用std::string
。
string Get()
{
string st("testing string");
return st.substr(0, st.length()/2);//returning substring
}
string s = Get();
顺便说一句,你现在想读的一篇有趣的文章(由Herb Sutter撰写)是: