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

时间:2013-11-01 00:28:43

标签: c command-line-arguments

所以我正在阅读C编程语言并遇到一个部分,现在允许程序有参数...... 例如

find -x -n pattern

此处,-x表示除外。 -n表示编号行... 在另外几行输入中,pattern就是它所寻找的。

现在,他们将find视为*argv[0],将-x-n视为*++argv[0],将pattern视为*++argv[0]。计算机如何知道另一个arg?

如果3件事都等于*++argv[0],那么他们会留在argv[1],但他们都是?{ 有谁可以请深入解释?

2 个答案:

答案 0 :(得分:3)

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  

这不会起作用,因为"一些" "笨" "文件名"将被视为单独的论点。 但你可以这样做:

mv "some stupid filename" sane_filename

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

答案 1 :(得分:2)

++n preincrement 运算符会更改它应用的变量。第一次执行++argv时,将0处的索引实际指向原始1的元素argv,第二次指向元素2,依此类推。