从 std::string 获取常量字符指针的正确返回方法
在编程中,Coverity 等错误检测工具会标记潜在问题。其中一个问题是从 std::string 返回常量 char 指针时出现问题,这可能会导致未定义的行为。
考虑以下代码:
const char * returnCharPtr() { std::string someString; // Some processing! return someString.c_str(); }
此问题方法是,一旦 std::string someString 被销毁,返回的 char 指针就变得无效,指向已释放的内存。这个问题可以通过返回 std::string 本身而不是它的 c_str() 来解决:
std::string returnString() { std::string someString("something"); return someString; }
但是,从返回的 std::string 访问 char 指针时要小心。例如,以下内容是不正确的:
const char *returnedString = returnString().c_str();
当返回的 std::string 被销毁时, returnedString 保持悬空状态,并且尝试访问 returnedString.c_str() 将导致未定义的行为。相反,存储整个 std::string:
std::string returnedString = returnString(); // ... use returnedString.c_str() later ...
这种方法可确保只要存储的 std::string 存在,char 指针就保持有效。
以上是如何从 std::string 安全地返回常量字符指针?的详细内容。更多信息请关注PHP中文网其他相关文章!