0

编辑:添加了一些对问题条件有很大变化的精度,请注意在判断答案之前。

const char*我在表单下得到一个环境变量。环境变量可以是

  • 未设置(我的意思是未设置,如果环境变量例如取自批处理环境,set MyBinaryEnvVar=
  • 设置为 0
  • 设置为 1

因此, const char* 形式将是

  • “”
  • “0”
  • “1”

我想用一个衬里测试它,未设置和“0”未通过测试,“1”通过它。所以像:

if(getEnvVar("MyBinaryEnvVar")) {dontWorry();}
else {beHappy();}

getEnvVar返回一个 const char* 。

VisualStudio 2010 上的测试表明 envVar 的三个值通过了测试,因此
if("") <==> if("0") <==> if("1") <==> TRUE

谢谢

4

2 回答 2

3

参见strcmp()字符串比较。返回的所有值getenv()都是字符串。你所需要的只是一份if声明。

请注意,您的逻辑错过了“其他”情况(当该值真正未设置(即getenv()返回NULL)或者它不是上述 3 个值时。

于 2013-10-11T16:38:09.357 回答
2

假设getEnvVar可以为未设置的值返回 NULL,则您不能有效地检查 NULL 并在一行中比较一个值。

假设您会做很多这样的事情并且想要一种简洁的方式来做这件事,您可以将这两个操作委托给一个新函数并将其称为单行:

bool isVarSet(const char* var)
{
    const char* val = getEnvVar("MyBinaryEnvVar");
    if (val != NULL && strcmp(val, "1") == 0) {
        return true;
    }
    return false;
}

if(isVarSet("MyBinaryEnvVar")) {dontWorry();}
else {beHappy();}

另一方面,如果为未设置的值getEnvVar返回一个空字符串"",你可以简单地做

if(strcmp(getEnvVar("MyBinaryEnvVar"), "1") == 0) {dontWorry();}
else {beHappy();}
于 2013-10-11T16:39:23.993 回答