将argv [1]存储到char变量中

时间:2014-01-15 11:54:13

标签: c argv

我将一个角色传递给我的程序,我想将这个角色存储到变量中。例如,我运行我的程序./a.out s file。现在我想将argv [1](它的s)保存到变量中(假设我将其定义为char ch;。我看到了这种方法:

ch = argv[1][0];

它有效。但我无法理解。数组argv不是一维数组?如果我删除[0],我会收到警告warning: assignment makes integer from pointer without a cast

4 个答案:

答案 0 :(得分:10)

如果你查看main()的声明,你会发现它是

int main(int argc, const char **argv);

int main(int argc, const char *argv[]);

所以argvconst 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数组。

  1. argv[1]返回char *

  2. argv[1][0]返回argv[1]中的第一个字符