1

处理一个简单的 C 程序时,我遇到了一个 if 测试:

int line_number = 0;
if ((line_number >= argv[2]) && (line_number <= argv[4]))

gcc 说:

cp.c:25:警告:指针和整数之间的比较
cp.c:25:警告:指针和整数之间的比较

我该怎么做才能正确检查我要处理的行的范围?

4

2 回答 2

8

当然它不起作用:argv是一个指向char.. 的指针的指针。目前尚不清楚你想要做什么,但想想这argv[2]是第三个参数,argv[4]是第五个参数。但它们是char*类型(它们是字符串),所以如果你想将它们解析为整数,你应该使用以下函数atoi

int value = atoi(argv[2]);

将解析作为第三个参数的 int 并将其放入变量中,然后您可以检查您想要的任何内容。

于 2010-03-08T23:34:15.277 回答
2

你不应该使用 function atoi。如果事实如此,你应该忘记它曾经存在过。它没有实际用途。

虽然杰克的回答是正确地指出必须argv首先将字符串转换为数字,atoi但为此目的(特别是在输入来自“外部世界”的情况下)是对 C 编程的犯罪。几乎没有任何情况atoi可以在程序中有意义地使用。

在这种情况下您应该使用的功能是strtol

char *end;
long long_value = strtol(argv[2], &end, 10);
if (*end != '\0' || errno == ERANGE)
  /* Conversion error happened */;

确切的错误检查条件(例如是否需要*end == '\0')实际上取决于您的意图。

如果您想最终获得一个int,您还应该检查int范围的值(或您的应用程序特定范围)

if (long_value < INT_MIN || long_value > INT_MAX)
  /* Out of bounds error */;

int value = long_value;
/* This is your final value */
于 2010-03-08T23:47:42.080 回答