首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >string(空字符*)错误: basic_string::_S_construct null无效错误

string(空字符*)错误: basic_string::_S_construct null无效错误
EN

Stack Overflow用户
提问于 2018-06-12 09:17:46
回答 2查看 488关注 0票数 1

在Debian上,我需要读取一个环境变量,否则返回一个空字符串。这是我的代码:

代码语言:javascript
运行
复制
std::string getEnv(std::string var)
{
    char* val = ::getenv(var.c_str());
    std::string retVal(val);
    return retVal;
}

当找不到环境变量时,我将得到以下错误:

代码语言:javascript
运行
复制
basic_string::_S_construct null not valid error

调试后,当我尝试将空val加载到std::string retVal(val)时,错误代码将发生在它上。

我想从一个空的char *加载一个字符串可以工作,但是看不出来。

如何修复上述代码,以便在不存在环境变量的情况下使其工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-12 09:26:15

来自man getenv

getenv()函数返回指向环境中值的指针,如果没有匹配,则返回NULL

所以你需要解释一下val == NULL的情况。

代码语言:javascript
运行
复制
std::string getEnv(std::string var)
{
    const char* val = ::getenv(var.c_str());
    if (val == nullptr)
        return std::string("");
    return std::string(val);
}

是一种可能的解决方案(如果未找到var,则返回空字符串)。

票数 6
EN

Stack Overflow用户

发布于 2018-06-12 09:37:56

您可以使用string::data()函数来获取缓冲区指针下面的地址。

试试var.c_str()或var.data()。

代码语言:javascript
运行
复制
  std::string getEnv(std::string var)
    {
        char* val = ::getenv(var.data());
        std::string retVal(val ? val : "");
        return retVal;
    }

对我来说是起作用的。

val ? val : ""以避免将空传递给std::string()构造函数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50813508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档