簡體   English   中英

std :: string(empty char *)錯誤:basic_string :: _ S_construct null無效錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM