在我的程序中,我将一个int
值输入到argv[1]
. 我需要这样if
声明:
num = 3;
if (argv[1] == num)
{
[...]
}
我收到警告:comparison between pointer and integer [enabled by default]
如何比较这两个值?
请记住argv
,传递给的main
,是一个字符串数组。
atoi
您可以使用or之类的函数将字符串转换为整数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