2010-10-28 35 views
1
bool print_date(Date *d, char **argv) { 

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

} 

上述功能不起作用。 * argv + 1是用户输入,是字符串还是传入时的类型?任何人都可以帮忙C编程校验位

int main(int argc, char *argv[]) 
{ 

    Date d; 

    get_date(&d, argv); 


} 
+4

你需要说什么不适合你。然而* argv是一个char *(指向char的指针),所以* argv + 1是第二个字符的地址,而不是字符本身。你可能意思是**(argv + 1)。 – 2010-10-28 15:25:39

+0

如果您对优先权不确定,请使用括号**。而不是'* argv + 1'使用'(* argv)+ 1'(甚至是'&(argv [0] [1])') – pmg 2010-10-28 15:32:48

回答

3

*argv+1地址计算为0个参数的第一个字符(即可执行文件名),并增加1以转入它的第二个字符。我不认为这是你想要的去做。

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

+0

感谢您的评论,但isdigit仍然无法正常工作 – friends 2010-10-28 15:43:41

+0

当然不起作用,'isdigit'假定一个字符,而使用'argv [1]'会给你整个字符串,而不仅仅是一个字符。你应该重新引用它来获得实际的'char'类型。 – Jack 2010-10-28 15:48:06

+0

如何解除引用?我是C – friends 2010-10-28 15:54:14

0

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