【问题标题】:Memory fault with the use of const char*?使用 const char* 时出现内存错误?
【发布时间】:2012-04-23 10:43:45
【问题描述】:

您好,我在 Linux 平台上使用 C++,我必须获取环境变量(用户定义)的值并进一步使用它。 以下是我正在使用的代码,

const char *show_line = getenv ("MY_SHOW_LINES");

bool myFlag = (strcmp(show_line, "1") == 0) ? false : true;

当我将环境变量 (MY_SHOW_LINES) 的值设置为 1 但当我取消设置它的值时(即取消设置 MY_SHOW_LINES),上面的代码可以正确执行。 上面的代码给出了内存故障。 关于上述联合国预期行为的任何建议? 提前致谢

【问题讨论】:

标签: c++ linux environment-variables


【解决方案1】:

如果将 NULL 指针传递给 strcmp,则会出现未定义的行为,在这种情况下很可能会崩溃。

您是否知道指针可以是NULL,即故意无效?

你应该警惕这种可能性:

bool myFlag = false; // set default value
if ( show_line != NULL ) {
    myFlag = ( strcmp(show_line, "1") != 0 ); // "? false : true" same as NOT…
}

【讨论】:

    【解决方案2】:

    根据手册页,

    getenv() 函数返回一个指向 环境,如果没有匹配则为 NULL。

    因此,如果它不存在,则返回NULL,这会导致strcmp() 出现消化问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      相关资源
      最近更新 更多