2012-10-31 13 views
0


我想通過控制檯參數傳遞一個無符號的int值給我的程序。

你有什麼我試過沒:
第一:檢查是否ARGC是2,否則錯誤如何獲得unsigned int作爲控制檯參數?

如果我試圖將該值轉換與第二值:

strtoul(argv[1], NULL, 0) 

所以當我通過「100」,我得到「1」
我做錯了什麼?

BR
史記



€:傳遞一個錯誤的參數,以我的功能,發現了錯誤,謝謝你們

+0

你確定argc == 2嗎? –

+0

是的,通過檢查'if(iArgCount!= 2)' – Sagi

+2

@Sagi發佈您的代碼 –

回答

4

這一點很難說沒有看到實際的代碼,但你可以以此爲基準:

#include <stdio.h> 
#include <stdlib.h> 

int main (int argc, char *argv[]) { 
    char *pCh; 
    unsigned long unlong = 42; 

    // Check enough arguments. 

    if (argc != 2) { 
     puts ("Not enough arguments"); 
     return 1; 
    } 

    // Convert to ulong WITH CHECKING! 

    unlong = strtoul (argv[1], &pCh, 10); 

    // Ensure argument was okay. 

    if ((pCh == argv[1]) || (*pCh != '\0')) { 
     puts ("Invalid number"); 
     return 1; 
    } 

    // Output converted argument and exit. 

    printf ("Argument was %ld\n", unlong); 
    return 0; 
} 

成績單如下:

pax> ./testprog 314159 
Argument was 314159 

如果這是不夠的,幫幫忙,我建議你張貼表現出的問題在最短的完整的程序,那麼我們就可以告訴你,在痛苦的細節是什麼地方錯了:-)

+0

謝謝,因爲我可以看到我在我的代碼中做同樣的事情... 'if(argc!= 2)'並在此之後'uiValue = strtoul(argv [1],NULL,0);' – Sagi

+0

@Sagi,然後在問題中發佈完整的代碼。這是我們確定的唯一方法。或者,輸入我的代碼_exactly_(copy'n'paste)以檢查它是否適用於您的環境。 – paxdiablo

+0

複製你的代碼,它的工作!也發現我的錯誤做了一切都是自己的功能,並通過錯誤的參數:/ – Sagi

0

你的方法應該工作。或者,你可以使用stringstream:

std::string str(argv[1]); 

unsigned long ul; 

std::stringstream(str)>>ul; 
相關問題