【发布时间】:2021-09-17 16:56:05
【问题描述】:
我将一个字符传递给我的程序,我想将此字符存储到变量中。例如,我像这样./a.out s file 运行我的程序。现在我想将 argv[1](它的 s)保存到一个变量中(假设我这样定义它char ch;。我看到了这种方法:
ch = argv[1][0];
它有效。但我无法理解。数组 argv 不是一维数组吗?如果我删除 [0],我会收到警告 warning: assignment makes integer from pointer without a cast
【问题讨论】:
-
"数组 argv 不是一维数组?" - 不:
char *argv[]——它是一个指向指针的指针。 (您可以将其视为指向指向char的指针数组的第一个元素的指针。 -
在 C 中,数组和指针之间的区别可能看起来有点模糊。指针总是可以解释为指向数组第一个元素的指针并用 [] 索引,而 argv[1] 给出指向 char 的指针,因此可以添加另一个 [] 将其用作 char 数组(这就是它的真正含义)情况下)。
-
好的,我明白了。我读了这个crasseux.com/books/ctutorial/argc-and-argv.html,上面写着
argv is a one-dimensional array of strings。这就是为什么我认为它是一维的。 -
C 有两种字符串数组:一维 char 指针数组(每个指向 char 数组,甚至可以是同一个,指针也可以为 NULL)和二维char 数组(每行是具有最大行大小长度的字符串)。不过,指针数组更常见。