当函数 SomeFunction() 返回字符串时,可能会出现在函数上调用 c_str()返回的字符串将成功地将其转换为 const 字符指针。但是,在某些情况下,您可能会遇到意外行为。
如提供的代码所示,直接在 SomeFunction() 上调用 c_str() 会导致引用垃圾数据的 const 字符指针 (charArray),同时分配返回的值将字符串转换为另一个字符串 (str),然后对其调用 c_str() 即可实现预期的行为。
为什么会发生这种情况:
SomeFunction().c_str()提供一个指向仅存在于函数作用域内的临时变量(SomeFunction() 内的 str 变量)的指针。函数返回后,该变量将被销毁,并且指针 (charArray) 变为悬空指针。
相反,当您使用 str_copy = SomeFunction() 时,将创建返回字符串的副本。这个新字符串存在于函数外部,当你对其调用 c_str() 时,它返回的指针指向有效数据,确保正确的转换。
以上是为什么当 str_copy = SomeFunction(); 时 SomeFunction().c_str() 返回垃圾数据str_copy.c_str();工作正常吗?的详细内容。更多信息请关注PHP中文网其他相关文章!