【问题标题】:How can *++argv[0] refer to different command line arguments?*++argv[0] 如何引用不同的命令行参数?
【发布时间】:2013-11-01 08:52:59
【问题描述】:

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

find -x -n pattern

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

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

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

【问题讨论】:

  • 注意*++argv[0]改变了指针argv的值。
  • 您应该阅读++ 运算符的作用。
  • google "什么是 argv 和 argc"
  • ++ 是前置自增运算符。 :) 它使用 C 指针算法更改指针 argv 的值。
  • 伙计们,我知道 argc、argv 和 post 和 pre 递增/递减运算符是什么,但是在循环中,每次你执行 ++argv[0] 时,你会不会得到下一个字符/整数?即 argv[1]...

标签: c command-line-arguments


【解决方案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

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

【讨论】:

  • 哦,所以每个参数基本上是用空格分隔的.. ?谢谢
【解决方案2】:

++n preincrement 运算符会更改它所应用的变量。第一次执行++argv,在0索引它实际上指向元素1原始argv有,第二次它指向元素2,并且以此类推。

【讨论】:

  • 这一切都是 ++arv[0]... 另外,计算机如何从另一个参数中知道一个参数?它们都在一行上,并且没有用逗号分隔...
  • 电脑不知道。当它运行命令时,shell 会告诉它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
  • 2013-06-13
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
相关资源
最近更新 更多