我的辅助函数返回一个空字符串
My helper function is returning an empty string
我正在为游戏编写一些代码,我正在尝试为 return 对象内的字符串编写辅助函数:
const char* getGhostName(GhostAI* ghostAI)
{
if (ghostAI) {
GhostInfo* ghostInfo = getGhostInfo(ghostAI);
const auto ghostName = ghostInfo->fields.u0A6Du0A67u0A74u0A71u0A71u0A66u0A65u0A68u0A74u0A6Au0A6F.u0A65u0A66u0A6Eu0A67u0A69u0A74u0A69u0A65u0A74u0A6Fu0A67;
const char* name = il2cppi_to_string(ghostName).c_str();
return name;
}
return "UNKNOWN";
}
这里是 il2cppi_to_string
函数:
std::string il2cppi_to_string(Il2CppString* str) {
std::u16string u16(reinterpret_cast<const char16_t*>(str->chars));
return std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t>{}.to_bytes(u16);
}
std::string il2cppi_to_string(app::String* str) {
return il2cppi_to_string(reinterpret_cast<Il2CppString*>(str));
}
当我调用 getGhostName
时,我得到一个空字符串。现在我确实收到了来自 ReSharper 的警告,上面写着:
Object backing the pointer will be destroyed at the end of the full-expression.
当调用 il2cppi_to_string
时,它出现在 getGhostName
中的下一行:
const char* name = il2cppi_to_string(ghostName).c_str();
我不完全确定这意味着什么或我如何修改代码来修复它。我非常讨厌在 C++ 中使用字符串。
il2cppi_to_string()
returns a temporary std::string
,会在调用il2cppi_to_string()
的表达式末尾销毁.您正在获取一个 const char*
指针,指向 临时 std::string
的数据,这是 ReSharper 警告您的内容。由于 temporary std::string
在 return
之前被销毁,这意味着 getGhostName()
是 returning 一个 悬挂指针无效内存.
要解决此问题,请将 getGhostName()
更改为 return a std::string
而不是 const char*
:
std::string getGhostName(GhostAI* ghostAI)
{
if (ghostAI) {
GhostInfo* ghostInfo = getGhostInfo(ghostAI);
const auto ghostName = ghostInfo->fields.u0A6Du0A67u0A74u0A71u0A71u0A66u0A65u0A68u0A74u0A6Au0A6F.u0A65u0A66u0A6Eu0A67u0A69u0A74u0A69u0A65u0A74u0A6Fu0A67;
return il2cppi_to_string(ghostName);
}
return "UNKNOWN";
}
我正在为游戏编写一些代码,我正在尝试为 return 对象内的字符串编写辅助函数:
const char* getGhostName(GhostAI* ghostAI)
{
if (ghostAI) {
GhostInfo* ghostInfo = getGhostInfo(ghostAI);
const auto ghostName = ghostInfo->fields.u0A6Du0A67u0A74u0A71u0A71u0A66u0A65u0A68u0A74u0A6Au0A6F.u0A65u0A66u0A6Eu0A67u0A69u0A74u0A69u0A65u0A74u0A6Fu0A67;
const char* name = il2cppi_to_string(ghostName).c_str();
return name;
}
return "UNKNOWN";
}
这里是 il2cppi_to_string
函数:
std::string il2cppi_to_string(Il2CppString* str) {
std::u16string u16(reinterpret_cast<const char16_t*>(str->chars));
return std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t>{}.to_bytes(u16);
}
std::string il2cppi_to_string(app::String* str) {
return il2cppi_to_string(reinterpret_cast<Il2CppString*>(str));
}
当我调用 getGhostName
时,我得到一个空字符串。现在我确实收到了来自 ReSharper 的警告,上面写着:
Object backing the pointer will be destroyed at the end of the full-expression.
当调用 il2cppi_to_string
时,它出现在 getGhostName
中的下一行:
const char* name = il2cppi_to_string(ghostName).c_str();
我不完全确定这意味着什么或我如何修改代码来修复它。我非常讨厌在 C++ 中使用字符串。
il2cppi_to_string()
returns a temporary std::string
,会在调用il2cppi_to_string()
的表达式末尾销毁.您正在获取一个 const char*
指针,指向 临时 std::string
的数据,这是 ReSharper 警告您的内容。由于 temporary std::string
在 return
之前被销毁,这意味着 getGhostName()
是 returning 一个 悬挂指针无效内存.
要解决此问题,请将 getGhostName()
更改为 return a std::string
而不是 const char*
:
std::string getGhostName(GhostAI* ghostAI)
{
if (ghostAI) {
GhostInfo* ghostInfo = getGhostInfo(ghostAI);
const auto ghostName = ghostInfo->fields.u0A6Du0A67u0A74u0A71u0A71u0A66u0A65u0A68u0A74u0A6Au0A6F.u0A65u0A66u0A6Eu0A67u0A69u0A74u0A69u0A65u0A74u0A6Fu0A67;
return il2cppi_to_string(ghostName);
}
return "UNKNOWN";
}