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

yay*_*zis 2 c argv

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

ch = argv[1][0];
Run Code Online (Sandbox Code Playgroud)

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

tro*_*foe 11

如果你看一下你的宣言就main()知道了

int main(int argc, const char **argv);
Run Code Online (Sandbox Code Playgroud)

要么

int main(int argc, const char *argv[]);
Run Code Online (Sandbox Code Playgroud)

所以argv是一个数组const char *(即字符指针或"C字符串").如果你取消引用,argv[1]你会得到:

"s"
Run Code Online (Sandbox Code Playgroud)

要么:

{ 's' , '\0' }
Run Code Online (Sandbox Code Playgroud)

如果你取消引用argv[1][0],你会得到:

's'
Run Code Online (Sandbox Code Playgroud)

作为附注,没有必要复制该角色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

}
Run Code Online (Sandbox Code Playgroud)