int和argv之间的比较

时间:2012-06-20 10:01:18

标签: c int argv

在我的计划中,我将int值输入argv[1]。我需要这样写一个if语句:

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

我收到警告:comparison between pointer and integer [enabled by default]
如何比较这两个值?

5 个答案:

答案 0 :(得分:3)

请注意,传递给argv的{​​{1}}是字符串的数组。

您可以将字符串转换为具有mainatoi等函数的整数(后者是首选替代品)。或者将整数转换为字符串,然后执行strtol

答案 1 :(得分:3)

num是一个整数,而argv[1]是一个可能(或可能不)表示整数的字符串。您只能比较相同类型的项目,因此要比较字符串到字符串或整数到整数:

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

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

当您尝试比较为零时,第二种方式将会崩溃(atoi返回零以指示错误)。

答案 2 :(得分: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 */
...

答案 3 :(得分:1)

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

答案 4 :(得分:0)

您可能需要使用各种方法从argv [1]中读取一个数字,然后与num进行比较。 (s * scanf)

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

或者将num打印到字符串中并使用argv执行strcmp [1](s * printf)