[英]Misspelling “argc” as “argv” results in a comparison between a char ** and an int - why?
[英]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
是一個字符串數組。
您可以使用atoi
或strtol
類的函數將字符串轉換為整數(后者是首選)。 或者,您將整數轉換為字符串,然后執行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.