C ++字符串:指针错误无效

时间:2011-01-26 10:13:27

标签: c++

当我调用下面的函数时,我收到一个无效的指针错误。为什么会这样?

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;
}

目标是返回子字符串。

3 个答案:

答案 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();
  • 的本地指针
  • valGetVal()的末尾被销毁,因此指针值无论如何都会无效。

答案 2 :(得分:1)

首选使用std::string

string Get()
{
    string st("testing string");
    return st.substr(0, st.length()/2);//returning substring
}

string s = Get();

顺便说一句,你现在想读的一篇有趣的文章(由Herb Sutter撰写)是:

GotW #88: A Candidate For the “Most Important const”