簡體   English   中英

int和argv之間的比較

[英]Comparison between int and argv

在我的程序中,我向argv[1]輸入了一個int值。 我需要這樣的if語句:

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

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

請記住,傳遞給main argv是一個字符串數組。

您可以使用atoistrtol類的函數將字符串轉換為整數(后者是首選)。 或者,您將整數轉換為字符串,然后執行strcmp

num是整數,而argv[1]是可能(或可能不)表示整數的字符串。 您只能比較相同類型的項目,因此可以比較字符串到字符串或整數到整數:

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

要么

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

當您嘗試與零比較時,第二種方法將崩潰( atoi返回零以指示錯誤)。

命令行參數是字符串。 您將需要先使用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 */
...
num = 3;    
if (atoi(argv[1]) == num)
{
   [...]
}

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

最適合您的一種: http : //pubs.opengroup.org/onlinepubs/7908799/xsh/strtol.html

或將num打印為字符串,然后使用argv [1](s * printf)執行strcmp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM