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)
argv 参数是一个 C 字符串向量;它的元素是单独的命令行参数字符串。正在运行的程序的文件名也作为第一个元素包含在向量中;argc 的值计算该元素。空指针总是跟在最后一个元素后面:argv[argc] 就是这个空指针。
char operate = argv[2][0] ;
Run Code Online (Sandbox Code Playgroud)
这里,argv[2]
是一个以 null 结尾的字符数组,或者是一个char *
. 的类型operate
是char
. 您尝试使用 a 初始化char
a char *
,因此出现警告。
argv[2][0]
表示 the 的第一个元素char *
是 a char
。因此定义是有效的,并且您不会收到任何警告。
argv[2] ---> Apple
|
|
argv[2][0]
Run Code Online (Sandbox Code Playgroud)
上述答案假设i < argc
. 在访问参数之前,您应该检查它是否有效。