【发布时间】:2020-10-17 15:08:52
【问题描述】:
我知道std::string不能为null,但是这里我想不出问题,让我解释一下。这是我的功能:
void HandleResponse(Mod::PlayerEntry player, std::string response)
所以response通常有一个json值,我用nlohmann json解析:
auto value = json::parse(response);
在某些情况下,它给出“null”,我使用以下方法进行调试:
std::cout << "response: " << response << ", value: " << value << std::endl;
// outputs: response: null, value: null
现在的问题是我不知道如何比较它是否为空,这是我尝试过的所有不同检查:
if(response == "null"){}
if(response == ""){}
if(response.empty()){}
if(response == 0){}
if(response == std::string("null")){}
if(response.c_str() == "null"){}
if(response.c_str() == NULL){}
if(response.c_str() == '\0'){}
if(value == "null"){}
这些都不起作用。
【问题讨论】:
-
取决于“null”的含义。如果您的意思是长度为零的字符串,请尝试
if (response.length() == 0)或if (!response.empty())。 -
可以发一个简单的示例代码吗?
-
请详细说明“这些都不起作用”。当您尝试这些检查时会发生什么?使用它们的代码是什么?
-
这是主变量
unsigned char **pk,然后这些被定义为auto id = *(unsigned int *) (*pk + 40); auto data = *(std::string *) (*pk + 48);,data变量作为response传递给HandleResponse。 -
response的类型是什么? json库是否不允许您检查该值是否为空?查看nlohmann看起来json::parse()返回json的对象。请注意,这不是std::string。json对象有一个方便的类型检查器:value.is_null()。