我将一个角色传递给我的程序,我想将这个角色存储到变量中。例如,我运行我的程序./a.out s file
。现在我想将argv [1](它的s)保存到变量中(假设我将其定义为char ch;
。我看到了这种方法:
ch = argv[1][0];
它有效。但我无法理解。数组argv不是一维数组?如果我删除[0],我会收到警告warning: assignment makes integer from pointer without a cast
答案 0 :(得分:10)
如果你查看main()
的声明,你会发现它是
int main(int argc, const char **argv);
或
int main(int argc, const char *argv[]);
所以argv
是const char *
的数组(即字符指针或“C字符串”)。如果您取消引用argv[1]
,您将获得:
"s"
或:
{ 's' , '\0' }
如果您取消引用argv[1][0]
,您将获得:
's'
作为旁注,没有必要从argv[1]
复制该字符,您可以这样做:
const char *myarg = NULL;
int main(int argc, const char **argv) {
if (argc != 2) {
fprintf(stderr, "usage: myprog myarg\n");
return 1;
} else if (strlen(argv[1]) != 1) {
fprintf(stderr, "Invalid argument '%s'\n", argv[1]);
return 2;
}
myarg = argv[1];
// Use argument as myarg[0] from now on
}
答案 1 :(得分:3)
argv
是一个字符串数组,或者说是char *
的数组。因此,argv[1]
的类型为char *
,argv[1][0]
的类型为char
。
答案 2 :(得分:2)
argv
的典型声明是
char* argv[]
这是char*
的数组。现在char*
本身就是一个指向以char
为空的数组的指针。
因此,argv[1]
的类型为char*
,这是一个数组。因此,您需要[]
运算符的另一个应用程序来获取该数组的元素,类型为char
。
答案 3 :(得分:0)
让我们看看主要的签名:
int main(int argc, char *argv[])
不,argv
不是一维数组。它是一个二维char数组。
argv[1]
返回char *
argv[1][0]
返回argv[1]
中的第一个字符