c - *++argv[0] 如何引用不同的命令行参数?

标签 c command-line-arguments

所以我在阅读《C 编程语言》时发现了一个部分,其中程序现在允许有参数...... 例如

find -x -n pattern

这里,-x表示异常(exception)。 -n 表示编号行... 而 pattern 就是它在另外几行输入中寻找的内容。

现在他们将 find 视为 *argv[0]-x-n*++argv[0]pattern*++argv[0]。计算机如何区分一个参数?

如果 3 个东西都等于 *++argv[0],那么它们将停留在 argv[1],但是所有这些? 谁能详细解释一下吗?

最佳答案

argv[0] = program name = "find"
argv[1] = first argument = "-x"
argv[2] = second argument = "-n"
argv[3] = third argument = "pattern"

argc = 4,因此您知道没有其他参数需要处理。

不要对 *++argv[0] 等表达式中预自增运算符的使用感到困惑。参数在单独的数组元素中传递。

当 shell 执行你的命令时,它使用空格来分隔命令行 进入程序名称和参数并将它们传递给您的程序。有时您需要使用双引号来解决这个问题,例如,如果您需要处理名称包含嵌入空格的文件:

mv some stupid filename sane_filename  

这不起作用,因为“some”“stupid”“filename”将被视为单独的参数。 但你可以这样做:

mv "some stupid filename" sane_filename

获取带有嵌入空格的单个参数。

关于c - *++argv[0] 如何引用不同的命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19718958/

相关文章:

c - 从堆栈和堆中获取二维数组的函数

c - 对链表中的偶数和奇数进行排序

python - 在 Snakemake 脚本中使用 argparse

C:霍夫曼编码

c - C中堆栈溢出和无限次循环调用的区别

c - 我在不使用 strlen 的情况下从命令行打印字符串长度时遇到问题?

c - 以通配符作为参数运行程序

bash - 访问 bash 命令行参数 $@ vs $*

Python:将通用字典作为命令行参数传递

c++ - 是否可以通过函数地址从 lua 脚本调用任何主机 c/c++ 函数?