检查C中的环境变量是否为空

时间:2013-11-13 16:31:12

标签: c unix

我必须检查环境变量是否存在以及它是否为整数值。我有这段代码:

char *aux;
aux=getenv("MAX_OUTPUT");
if (aux==NULL || !(isInteger(aux))){
/*code*/
}

我检测到它没有用aux == NULL定义,如果它不是带有我定义的函数的整数(isInteger)。这是有效的,问题是变量存在但是设置为空字符串。有任何想法吗?提前致谢

4 个答案:

答案 0 :(得分:2)

应为任何输入定义(或显式未定义)isInteger的行为。保持isInteger(NULL)的行为未定义,要求调用者传递有效的字符串指针是不合理的。

正如unwind的回答所示,isInteger应该为空字符串返回false(0)。

但是如果你想自己检查一个空字符串,可以检查长度为0:

char *aux;
aux=getenv("MAX_OUTPUT");
if (aux==NULL || strlen(aux) == 0 || !(isInteger(aux))){
/*code*/
}

或者,等效地,您可以检查字符串的第一个(第0个)字符是否是终止的空'\0'字符:

char *aux;
aux=getenv("MAX_OUTPUT");
if (aux==NULL || *aux == '\0' || !(isInteger(aux))){
/*code*/
}

*aux也可以写为aux[0]

请注意,这不会检查,例如,aux包含一个空格:" ",但isInteger可能应该再次处理。

假设isInteger行为合理,为任何看起来像整数的字符串返回true结果,对任何没有的字符串返回false结果(并且可能对空指针或指针的未定义行为返回不指向有效的字符串),然后这个:

if (aux == NULL || !isInteger(aux)) {
    /* it's not an integer */
}

应该足够了。

答案 1 :(得分:0)

如果isInteger()没有说false为空字符串,我会毫不犹豫地宣称它有效。当然,如果不包含isInteger()的代码,则很难更具体。

我认为像bool isInteger(const char *str)这样的函数必须为false和空字符串返回NULL,因此甚至不需要aux == NULL测试。

答案 2 :(得分:0)

if (aux == NULL || (!isInteger(aux) || !*aux)) {

那样的? *如果字符串为空则进行辅助测试

答案 3 :(得分:0)

如果在验证aux不是NULL后,您是否可以使用C函数isdigit()来检查aux的第一个元素?

if(isdigit(aux[0]){...}  

或:

char *aux;
aux=getenv("MAX_OUTPUT");
if (aux!=NULL)
{
    if(!isdigit(aux[0]))
    {
        /*code*/
    }
}  

(假设您不需要使用isInteger()