函数返回的字符串引用本地对象地址

时间:2018-01-29 05:55:34

标签: c++ string static-analysis

我从事过技术债务并发现了以下问题,可能对以下C ++代码有误:

string CXXXIXMLImp::GetString(U32 val)
{
    char bufVal[64] = { 0 };
    sprintf_s(bufVal, 63, "%ld", val, 63);
    string strRetVal = bufVal;
    return strRetVal;
}
  

错误:通过return语句表达式

返回局部变量的地址

注意:上面的stringstd::string

我在第5行使用字符串赋值函数或使用string :: copy修改了代码。需要同样的建议

1 个答案:

答案 0 :(得分:1)

这是误报。如果Klocwork无法理解std :: string接受其构造函数参数的副本,然后正确处理副本,我建议你需要一个更好的静态分析工具。

使用字符串assign或string::copy污染您的代码。 (如果你可以通过将行更改为const string strRetVal = buffer;来禁止它。)