1

在我的程序中,我将一个int值输入到argv[1]. 我需要这样if声明:

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

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

4

5 回答 5

3

请记住argv,传递给的main,是一个字符串数组。

atoi您可以使用or之类的函数将字符串转换为整数strtol(后者是首选)。或者您将整数转换为字符串,然后执行strcmp.

于 2012-06-20T10:05:55.260 回答
3

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

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

或者

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

当您尝试与零进行比较时,第二种方法将分崩离析(atoi返回零表示错误)。

于 2012-06-20T10:06:26.673 回答
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 */
...
于 2012-06-20T10:03:53.857 回答
1
num = 3;    
if (atoi(argv[1]) == num)
{
   [...]
}
于 2012-06-20T10:04:52.750 回答
0

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

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

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

于 2012-06-20T10:03:41.390 回答