【发布时间】:2015-05-29 06:52:04
【问题描述】:
我想在运行时输入一些命令行参数。喜欢
./program abc def ghi
argc 在这种情况下为 4。在这方面没有问题。但是如果我这样做了
./program abc def *
甚至
./program * abc def
变量 argc 给我的值远大于 4。
在将整个 argv 数组(撇开第 0 个参数;./program)打印为字符串时,我得到了一个列表,其中前两个元素是 abc 和 def,其他都是文件名工作目录中包含的文件。
我正在尝试向 K&R 学习 C。我正在尝试制作一个 RPN 计算器,我们可以在其中给出./program 2 4 * 之类的表达式。
这是什么原因?还是我哪里错了?
【问题讨论】:
-
查找“globbing”顺便说一句:尝试
/bin/echo abc def *,而不是您的程序。 -
* 可能由你的 shell 解释并替换为当前目录中的所有文件。
-
谢谢。但是解决方法是什么?
-
这是您的操作系统在传递参数之前所做的事情。您可能应该用相关的操作系统标记这个问题(我猜是 Linux)。附带说明一下,避免使用 K&R,它已经完全过时,充满了错误和糟糕的编程习惯。
-
@Lundin,不是操作系统,而是外壳。您可以在 cygwin 下运行
bash并获得相同的行为。
标签: c shell osx-mavericks argc