文字列内のすべての文字が英数字かどうかを判断しようとしています。私のコンパイラにはisalnum関数がありません。
私の関数は以下のとおりで、my_structにはサイズ6のchar配列(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' ) )
警告:「ポインタから小さい整数への変換」
私の質問は、警告なしにこの定義を適切に作成するにはどうすればよいですか(そして明らかに正しくチェックします)。
ありがとう