每当我尝试在 c 中的命令行参数中使用运算符进行某些操作时,为什么会有 argv[i][0] ?

Poc*_*ird 1 c command-line-arguments

我正在学习 C 中的命令行参数。有一个部分我应该用 argv[i] 的位置定义 char 变量。我尝试使用argv[2],但它显示一些警告( warning: initialization of 'char' from 'char *' makes integer from pointer without a cast [-Wint-conversion] )

每当我这样做时argv[2][0],它确实有效。

为什么最后有一个0。对我来说这似乎是一个二维数组。

#include <stdio.h>
#include <stdlib.h>
int main(int argc,  char *argv[])
{
    int a, b, sum = 0 ;
    char operate = argv[2][0] ; //I tried running it by using argv[2], but it showing a conversion error
    // warning: initialization of 'char' from 'char *' makes integer from pointer without a cast [-Wint-conversion].

    if(argv[4])
    {
        printf("Please enter a valid numebr ") ;
        return -1 ;
    }
    a = atoi(argv[1]) ;
    b = atoi(argv[3]) ;

    //now to choose operator
    switch(operate) {
        case '+' :
            sum = a + b;
            break;

        case '-' :
            sum = a - b;
            break;
    }

    printf("The operation is = %d", sum ) ;
}
Run Code Online (Sandbox Code Playgroud)

Har*_*ith 7

argv 参数是一个 C 字符串向量;它的元素是单独的命令行参数字符串。正在运行的程序的文件名也作为第一个元素包含在向量中;argc 的值计算该元素。空指针总是跟在最后一个元素后面:argv[argc] 就是这个空指针。

char operate = argv[2][0] ;
Run Code Online (Sandbox Code Playgroud)

这里,argv[2]是一个以 null 结尾的字符数组,或者是一个char *. 的类型operatechar. 您尝试使用 a 初始化chara char *,因此出现警告。

argv[2][0]表示 the 的第一个元素char *是 a char。因此定义是有效的,并且您不会收到任何警告。

argv[2] ---> Apple 
             |
             | 
         argv[2][0]
Run Code Online (Sandbox Code Playgroud)

上述答案假设i < argc. 在访问参数之前,您应该检查它是否有效。