C编程校验位

C编程校验位,c,C,上述功能不起作用*argv+1是用户输入,是字符串还是传入时的类型?有人能帮忙吗 bool print_date(Date *d, char **argv) { if (isdigit(*argv+1)) { return printf("is d"); } else { return printf("is not d"); } } *argv+1计算第0个参数(即可执行文件名)

上述功能不起作用*argv+1是用户输入,是字符串还是传入时的类型?有人能帮忙吗

bool print_date(Date *d, char **argv) {

        if (isdigit(*argv+1)) {
                return printf("is d");
        } else {
                return printf("is not d");
        }

}

*argv+1
计算第0个参数(即可执行文件名)的第一个字符的地址,并将1添加到第二个字符的移位。。我不认为这是你想做的


您可以尝试使用
argv[1]
,这将意味着可执行文件名称后面的第一个参数,作为
char*

我猜您真正想要的是
*(argv+1)
。您编写它的方式是,它将取消对程序的第一个字符的引用,添加一个字符,然后测试它是否是数字。

您需要说出哪些不适合您。但是*argv是char*(指向char的指针),因此*argv+1是第二个字符的地址,而不是字符本身。您的意思可能是**(argv+1)。如果您不确定前后关系,请使用括号。与其使用
*argv+1
不如使用
(*argv)+1
(甚至
&(argv[0][1])
)当然,它不起作用,
isdigit
假设使用
argv[1]
时只使用一个字符,而不是一个字符。您应该再次取消引用以获得实际的
char
类型。如何取消引用?我是一个C@friends尝试<代码> ARGV [1 ] [0 ] < /代码>——这将是第一个参数的第一个字符(并且还考虑检查ARCC以确保至少有一个参数被传递)。或者您可以使用非常简单的user470379解决方案。@user470379 thaks,我已经检查了argv[1]正是我想要的
 int main(int argc, char *argv[])
 {

  Date d;

  get_date(&d, argv);


 }