2012-06-20 86 views
1

在我的程序中,我輸入int值到argv[1]。我需要把if聲明是這樣的:int和argv之間的比較

num = 3;  
if (argv[1] == num) 
{ 
    [...] 
} 

我得到一個警告:comparison between pointer and integer [enabled by default]
如何比較這兩個值?

+1

你需要將字符串解析爲一個'int'。 – Mysticial

+1

C中沒有矢量嗎?你的意思是數組嗎? – wildplasser

回答

0

您可能需要使用各種方法從argv [1]中讀取一個數字,然後與num進行比較。 (S * scanf函數)

一說是最具體的給你:http://pubs.opengroup.org/onlinepubs/7908799/xsh/strtol.html

或者打印張數轉換爲字符串,並做argv的一個STRCMP [1](S * printf的)

+0

如何將「num」轉換爲字符串? – Lc0rE

+0

'int argnum = strtol(argv [1],NULL,10); if(num == argnum){}' –

+0

'char tmp [8];的sprintf(TMP, 「%d」,NUM);如果(strcmp(argv [1],tmp)== 0){}' –

1

的命令行參數字符串。您需要首先使用atoi(不建議)或strtol/strtoul(更好,具有錯誤處理)來轉換這些字符串,然後使用轉換後的值與任何要比較的整數進行比較。

char *endptr; 
errno = 0; 
long int n = strtol(argv[ i ], &endptr, 10); 
if (endptr == argv[2]) 
    ...; /* no conversion */ 
else if (*endptr != '\0') 
    ...; /* conversion incomplete */ 
else if (errno == ERANGE) 
    ...; /* out of `long int''s range */ 
... 
+0

如何在這種情況下使用「strtod」函數?比你非常多 – Lc0rE

+1

@ user1409641:'strtod'用於將字符串轉換爲浮點數。這是一個錯字。我修復了錯字。使用'strtol'或'strtoul'(後者用於'unsigned'整數)。爲您添加了一些代碼,以便開始使用。 – dirkgently

1
num = 3;  
if (atoi(argv[1]) == num) 
{ 
    [...] 
} 
+0

atoi有錯誤報告問題。堅持strtol。 –

3

記住argv,它被傳遞到main,是的陣列。

您可以將字符串轉換爲具有atoistrtol(後者是首選替代方法)等功能的整數。或者你將整數轉換爲一個字符串,並做一個strcmp

+0

「strtod」和「strtol」之間的區別?非常感謝 – Lc0rE

+0

@ user1409641'strtol'將一個字符串轉換爲一個整數('long')類型,而'strtod'轉換爲一個浮點('double')類型。 –

2

num是一個整數,而argv[1]是一個字符串,可能(或可能不)代表一個整數。您可以比較同類型的唯一項目,所以要麼比較字符串到字符串或整數到整數:

if (strcmp(argv[1], "3") == 0) { 
    // ... 
} 

if (atoi(argv[i]) == 3) { 
    // ... 
} 

第二種方式將土崩瓦解你的時候嘗試比較爲零(atoi返回零以指示錯誤)。