gpt4 book ai didi

c++ 如何处理返回 NULL 或 std::string 的方法?

转载 作者:行者123 更新时间:2023-11-30 00:54:50 34 4
gpt4 key购买 nike

我有点被一些代码困住了。我必须使用方法 getToto() 的返回类型,它通常返回一个 std::string,但在一种情况下它返回 false (它是我必须使用的库的一部分,我无法修改它)。我理解这相当于一个空指针。但是我找不到合适的方法来捕捉它!

测试.cpp

static std::string getToto(){
char buffer[1024];
if ( CTX_Get_Env(buffer, "Toto", 1024) )
return false;
return buffer;
}

如果我尝试

const char* returned = Test::getToto().c_str();
if (returned==NULL){
std::cout<< "null pointer"<<std::endl;
}

运行时出错

terminate called after throwing an instance of 'std::logic_error'

what(): basic_string::_S_construct NULL not valid

抱歉,我的C++水平比较低。

最佳答案

这取决于。是返回空字符串部分逻辑,还是异常情况。

如果它不应该发生,你应该抛出一个错误。

如果字符串可以为空,你应该只返回一个空字符串:

 return std::string();

它按原样编译的原因是 false 被解释为 0,即 NULL,可以是 char*,因此尝试从中构造一个字符串。但是,从 NULL 指针构造 std::string 是无效的,这就是您获得异常的原因。

下面是我的编码方式:

static std::string getToto(){
char buffer[1024];
if ( CTX_Get_Env(buffer, "Toto", 1024) )
throw InvalidDataInBufferException();
return buffer;
}

如果字符串不应该为空,或者

static std::string getToto(){
char buffer[1024];
if ( CTX_Get_Env(buffer, "Toto", 1024) )
return std::string();
return buffer;
}

如果字符串可以为空。

关于c++ 如何处理返回 NULL 或 std::string 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13477488/

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