gpt4 book ai didi

c++ - wchar的内容被删除

转载 作者:行者123 更新时间:2023-11-28 06:09:13 25 4
gpt4 key购买 nike

我有这个代码:

JSONObject object;
if (value->IsObject())
{
object = value->AsObject();
const wchar_t *tmp = from_string(entity_id);
std::wcout << tmp << std::endl;
std::wcout.flush();
if (object.find(tmp) != object.end())
{
std::wcout << tmp << std::endl;
std::wcout.flush();
initFromJSON(object[tmp]->AsObject());
}
else
{
return false;
}

}

这里的问题是在内部 if 语句之后,tmp 的内容是空的。在此之前不是。当我尝试调试时,一切正常,内容没有被删除。但是当我运行程序时,内容被删除了。知道为什么吗?

方法 from_string(entity_id) 只能像这样从字符串转换为 wchar:

std::wstring result;
for (int i = 0; i<content.length(); i++)
result += wchar_t(content[i]);
return result.c_str();

方法 JSONObject::find(...)JSONObject::end() 是这样的:

iterator find(const key_type& __k)             {return __tree_.find(__k);}
iterator end() _NOEXCEPT {return __tree_.end();}

我不认为这是 find(...) 或 end() 中的问题。我猜这个问题出在其他地方,但我找不到它。因为if语句后wchar的内容是空的我不能说

initFromJSON(object[tmp]->AsObject());

因为 object[tmp] 不存在。

有什么建议我做错了吗?

最佳答案

问题在于您的from_string 函数返回一个指向本地实体的指针,即std::wstring::c_str() 的返回值。因此,您引入了未定义的行为。

我认为tmp 变量没有任何理由是一个指针。你应该能够做这样的事情:

std::wstring from_entity(...)
{
std::wstring result;
for (int i = 0; i<content.length(); i++)
result += wchar_t(content[i]);
return result;
}

然后是:

JSONObject object;
if (value->IsObject())
{
object = value->AsObject();
std::wstring tmp = from_string(entity_id);
std::wcout << tmp << std::endl;
std::wcout.flush();
if (object.find(tmp.c_str()) != object.end())
{
std::wcout << tmp << std::endl;
std::wcout.flush();
initFromJSON(object[tmp.c_str()]->AsObject());
}
else
{
return false;
}
}

请注意,返回的是 std::wstring,而不是指针。然后在函数本身内,如果需要传递 const wchar_t*,则使用 c_str()

关于c++ - wchar的内容被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31621307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com