文字列内のすべての文字が英数字かどうかを確認しようとしています。私のコンパイラはisalnum関数を持っていません。isalnum equivalent with #define
私の関数は以下の通りで、my_structは6のサイズの文字配列(uint8 bom_pn [6])を持ちます。そして、uint8はcharです。
boolean myfunc(my_struct * lh)
{
ret = (isalphanum(lh->bom_pn) && isalphanum(lh->bom_pn + 1) &&
isalphanum(lh->bom_pn + 2) && isalphanum(lh->bom_pn + 3) &&
isalphanum(lh->bom_pn + 4) && isalphanum(lh->bom_pn + 5));
}
私のマクロ定義は以下の通りです:上記
#define isalphanum(c) ((c >= '0' && c <= '9') || \
(c >= 'A' && c <= 'Z') || \
(c >= 'a' && c <= 'z'))
私は私の定義を変更した場合、エラー "オペランドの型は互換性がありません(" UINT8 * "と" INT ")"
をスローします以下に、私のコードがコンパイルされ、警告が表示されます。
#define isalphanum(c) (((uint8)c >= '0' && (uint8)c <= '9') || \
((uint8)c >= 'A' && (uint8)c <= 'Z') || \
((uint8)c >= 'a' && (uint8)c <= 'z'))
警告:「ポインタから小さな整数に変換」
私の質問はどのように私はきちんと警告せずに、この定義を作成してください(と明らかに正確に確認してください)、です。
おかげ
注意です問題を解決するために、あなたはロケールをまったく扱っていません。あなたの環境に 'ctype.h'がないのはなぜですか? – geekosaur
bah、私はちょうど返事(isal .....)を言うことを意味した – NickG