2

所以我在阅读 The C Programming language 时遇到了一个部分,现在允许程序有参数......例如

find -x -n pattern

在这里,-x意思是除了。 -n表示编号的行......pattern这就是它在另外几行输入中要查找的内容。

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

如果 3 件事都等于*++argv[0],那么它们都停留在argv[1],但是它们都??有人可以深入解释一下吗?

4

2 回答 2

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

得到一个带有嵌入空格的参数。

于 2013-11-01T00:37:50.990 回答
2

++n 增量运算符会更改它所应用的变量。第一次++argv执行,索引它0实际上指向原始值的元素1,第二次它指向元素,依此类推。argv2

于 2013-11-01T00:32:01.203 回答