【发布时间】:2021-05-02 22:47:59
【问题描述】:
代码如下:
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
bool isHex(char * str[20]){
return isxdigit(str);
}
int main(){
printf("%d\n", isHex("A8"));
return 0;
}
我在尝试编译时收到以下消息:
ishex.c:6:21: warning: incompatible pointer to integer conversion passing 'char **'
to parameter of type 'int' [-Wint-conversion]
return isxdigit(str);
^~~
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_ctype.h:280:14: note:
passing argument to parameter '_c' here
isxdigit(int _c)
^
ishex.c:13:26: warning: incompatible pointer types passing 'char [3]' to parameter
of type 'char **' [-Wincompatible-pointer-types]
printf("%d\n", isHex("A8"));
^~~~
ishex.c:5:19: note: passing argument to parameter 'str' here
bool isHex(char * str[20]){
我的代码有什么问题?如果字符串是有效的十六进制字符,我只希望它返回 true (1),如果字符串不是有效的十六进制字符,则返回 false (0)。
【问题讨论】:
-
用你自己的话来说:你认为
char * str[20]是什么意思——你会用什么词来解释str的类型是什么?您是否希望"A8"成为该类型的实例?为什么? -
char *str[20]表示 20 个字符串的数组。"A8"不是字符串数组,它只是一个字符串。 -
声明它只是
char *str或char str[]。您不需要在参数声明中指定大小(您可以这样做,但会被忽略)。 -
@Barmar
const char *或const char []。 const 正确性应该从一开始就学习