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

标签 c unix

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

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

我会检测何时未使用 aux==NULL 定义它,以及它是否不是具有我定义的函数 (isInteger) 的整数。这行得通,问题是当变量存在但设置为空字符串时。有任何想法吗?提前致谢

最佳答案

应该为任何输入定义(或显式未定义)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 */
}

应该足够了。

关于在 C 中检查环境变量是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19959215/

相关文章:

c++ - int16_t 到 float 转换怪异

c - C 中的链表

c - 将模块源库加载到程序中

macos - 如何使用CHMOD获取 "drwx---r-x+"文件夹权限? - bash 脚本

linux - 按 bash 中出现的次数分组排序

c++ - 字符串与结构元素比较

c++ - 即使 MsiCloseHandle 存在,是否也需要调用 MsiViewClose ?

unix - 使用 grep 进行多种搜索模式

unix - 为什么我使用 ps 看不到 PID 为 0 的进程?

c - C unix 中的文件配置、创建和使用