指针和整数之间的错误比较

时间:2014-08-01 23:46:14

标签: c

C问题陈述:搜索整数数组以查找第一个第一个负整数(如果存在),返回其在数组中的位置。 我知道我可以通过使用索引来实现这一点,但是,我只是想知道为什么程序不会进入if条件?即使我进行了转换,代码也永远不会进入内部。

void find_negative(int argc, char *argv[])
{
    int i = 0; 
    //ignore the first string of arguments because it will be "./problem1.3.c"
    for(i =1; i<argc;i++)
    {
        if(*(argv+i)==2) <-------------------------this is where I get stuck (problem)
        {
            printf("found it at %d location.\n", i);
        }
        else
        {
            printf("All positive.\n");
        }
    }
}
int main(int argc , char *argv[])
{
   find_negative(argc, argv);
   return 0;
}

3 个答案:

答案 0 :(得分:2)

(argv+i)的类型为char** *(argv+i)的类型为char*

在该行中,

if(*(argv+i)==2) 

您正在尝试将char*与2进行比较,其类型为int。这解释了编译器错误消息。

也许您想从参数中提取一个整数并将其与2进行比较。然后,您需要使用:

if(atoi(*(argv+i))==2) 

答案 1 :(得分:1)

有些注意事项:

  1. *(argv + i)完全等同于argv[i]。在这个特定的代码中没有任何区别。

  2. argv具有类型char **(指向char的指针),因此*(argv + i)具有类型char *(指向char的指针)。您将此直接与整数值2进行比较,这就是编译器为您带来悲伤的原因,因为很难将指针与整数进行比较。

  3. 将字符串"2"与整数值2进行比较将不起作用,它们完全是不同的类型。如果程序通过命令行参数接收其输入,则应将输入解析为实际的二进制整数。

  4. 举个例子:

    #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
        for (int i = 1; i < argc; i++)
        {
            long value = strtol(argv[i], NULL, 10);
            if (value < 0)
            {
                printf("Found a negative integer at position %d\n", i);
                return 0;
            }
        }
    
        // if we get here then there were no negative integers in the input
        puts("No negative integers in input");
        return 1;
    }
    

    我上面使用的函数记录为here

答案 2 :(得分:0)

输入,argv是一个字符数组。您可能首先需要解析它并将其转换为整数数组。