在我的计划中,我将int
值输入argv[1]
。我需要这样写一个if
语句:
num = 3;
if (argv[1] == num)
{
[...]
}
我收到警告:comparison between pointer and integer [enabled by default]
如何比较这两个值?
答案 0 :(得分:3)
请注意,传递给argv
的{{1}}是字符串的数组。
您可以将字符串转换为具有main
或atoi
等函数的整数(后者是首选替代品)。或者将整数转换为字符串,然后执行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)