![](/img/trans.png)
[英]basic_string::_S_construct null not valid error while sending std::string in function argument/socket
[英]std::string(empty char*) error: basic_string::_S_construct null not valid error
在Debian上,我需要讀取一個環境變量,否則返回一個空字符串。 這是我的代碼:
std::string getEnv(std::string var)
{
char* val = ::getenv(var.c_str());
std::string retVal(val);
return retVal;
}
找不到環境變量時,出現以下錯誤:
basic_string::_S_construct null not valid error
調試后,當我嘗試向其加載空值時,錯誤代碼會在std::string retVal(val)
發生。
我可以從一個空的char *
加載一個字符串,但是可以,但是似乎不行。
如何修復以上代碼,以便在環境變量不存在的情況下可以正常工作?
來自man getenv
:
getenv()
函數返回指向環境中值的指針;如果不匹配,則返回NULL
。
因此,您需要考慮val == NULL
的情況。
std::string getEnv(std::string var)
{
const char* val = ::getenv(var.c_str());
if (val == nullptr)
return std::string("");
return std::string(val);
}
可能的解決方案(如果未找到var,則返回空字符串)。
您可以使用string :: data()函數獲取下緩沖指針的地址。
嘗試var.c_str()或var.data()。
std::string getEnv(std::string var)
{
char* val = ::getenv(var.data());
std::string retVal(val ? val : "");
return retVal;
}
對我來說,它的工作。
val ? val : ""
val ? val : ""
避免將NULL傳遞給std::string()
構造函數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.