我必须检查环境变量是否存在以及它是否是整数值。我有这个代码:
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
行为合理,则为任何看起来像整数的字符串返回真结果,而为任何不是整数的字符串返回假结果(对于空指针或不指向有效字符串的指针可能具有未定义的行为),然后这个:
if (aux == NULL || !isInteger(aux)) {
/* it's not an integer */
}
应该足够了。
如果isInteger()
没有说false
空字符串,我会犹豫声称它有效。当然,如果没有isInteger()
包含的代码,很难更具体。
我认为像这样的函数bool isInteger(const char *str)
必须false
同时返回NULL
一个空字符串,所以aux == NULL
甚至不需要测试。
if (aux == NULL || (!isInteger(aux) || !*aux)) {
像那样 ?*aux 测试字符串是否为空
如果验证后aux
不为NULL,可以不用C函数isdigit()
检查第一个元素aux
吗?
if(isdigit(aux[0]){...}
或者:
char *aux;
aux=getenv("MAX_OUTPUT");
if (aux!=NULL)
{
if(!isdigit(aux[0]))
{
/*code*/
}
}
(假设您不需要使用isInteger()
)