2010-10-28 30 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)。你寫它的方式是它將取消引用程序的第一個字符,添加一個然後測試它是否是數字。