首页 >后端开发 >C++ >为什么当 str_copy = SomeFunction(); 时 SomeFunction().c_str() 返回垃圾数据str_copy.c_str();工作正常吗?

为什么当 str_copy = SomeFunction(); 时 SomeFunction().c_str() 返回垃圾数据str_copy.c_str();工作正常吗?

Patricia Arquette
Patricia Arquette原创
2024-11-18 22:46:02931浏览

Why Does SomeFunction().c_str() Return Garbage Data While str_copy = SomeFunction(); str_copy.c_str(); Works Correctly?

了解函数返回的字符串的 c_str() 函数

当函数 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn