の動作はisInteger
、すべての入力に対して定義する (または明示的に未定義にする) 必要があります。isInteger(NULL)
呼び出し元が有効な文字列ポインターを渡す必要があるため、未定義の動作をそのままにしておくことは不合理ではありません。
巻き戻しの答えが示唆するように、isInteger
おそらく空の文字列に対して false (0) を返す必要があります。
ただし、空の文字列を自分で確認したい場合は、長さが 0 かどうかを確認できます。
char *aux;
aux=getenv("MAX_OUTPUT");
if (aux==NULL || strlen(aux) == 0 || !(isInteger(aux))){
/*code*/
}
または、同等に、文字列の最初 (0 番目) の文字が終端の null'\0'
文字かどうかを確認できます。
char *aux;
aux=getenv("MAX_OUTPUT");
if (aux==NULL || *aux == '\0' || !(isInteger(aux))){
/*code*/
}
*aux
のように書くこともできますaux[0]
。
aux
これは、たとえば単一の空白を含むかどうかをチェックしないことに注意してください: " "
、しかし、isInteger
おそらくそれを処理する必要があります。
それが合理的に動作すると仮定するとisInteger
、整数のように見える文字列に対して真の結果を返し、そうでない文字列に対して偽の結果を返します (おそらく、null ポインターまたは有効な文字列を指していないポインターの未定義の動作で) )、次にこれ:
if (aux == NULL || !isInteger(aux)) {
/* it's not an integer */
}
十分なはずです。