gpt4 book ai didi

c - isalnum 等效于使用#define

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:08 26 4
gpt4 key购买 nike

我正在尝试确定我的字符串中的每个字符是否都是字母数字。我的编译器没有 isalnum 函数。

我的函数在下面,my_struct 有一个大小为 6 的字符数组 (uint8 bom_pn[6]) ....是的,uint8 是一个字符。

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' ) )

警告:“从指针到较小整数的转换”

我的问题是,如何在没有警告的情况下正确地创建这个定义(并且显然检查正确)。

谢谢

最佳答案

正如您所说,lh->bom_pn 是一个字节数组,这意味着它实际上是一个指针。

因此,当您将它传递给 isalphanum 时,您传递的是一个指针,并将其与文字字节进行比较。

你有两个选择:

1.)

ret = ( isalphanum( lh->bom_pn[0] ) && 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] ) );

2.)

#define isalphanum(c) ( ( *(c) >= '0' && *(c) <= '9' ) ||  \
( *(c) >= 'A' && *(c) <= 'Z' ) || \
( *(c) >= 'a' && *(c) <= 'z' ) )

任何一个都可以解决您的问题。

关于c - isalnum 等效于使用#define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10094476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com