C编程校验位
上述功能不起作用*argv+1是用户输入,是字符串还是传入时的类型?有人能帮忙吗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个参数(即可执行文件名)
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);
}