argc 在 C 程序中给出错误的值
argc giving erroneous value in C program
我想在 运行 时输入一些命令行参数。喜欢
./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 *
.
这样的表达式
这是什么原因?还是我哪里错了?
Shell 有一个名为 globbing 的功能,它们将某些模式(例如 *
)扩展到匹配文件。如果在当前目录中有以下内容:
file1 file2 somethingelse dir1
然后调用:
any_program *
将等同于:
any_program file1 file2 somethingelse dir1
或者如果你这样做:
any_program fi*
它将等同于:
any_program file1 file2
这是shell的一个特点。你的C程序很乖
由于 shell 不同,我们假设您使用的是 bash
。为防止 bash
执行扩展,您应该引用该参数。例如:
any_program "fi*"
实际上会将 fi*
传递给您的程序,而不会将其扩展为 file1 file2
。
命令行解释器在将参数传递给您的程序之前将 *
字符作为通配符处理,就像您键入 DIR *
.
时所做的一样
简单的解决方案是设计一个不被解释的有意义的参数。
您可以通过将 * 放在单引号中来防止 * 扩展为文件名,即
./program 2 4 '*'
这样您的程序将收到 3 个输入参数,其值为“2”、“4”和“*”(就 C 字符串而言)。
如果您正在使用 bash,请使用 -f
开关启动 shell 以关闭诸如 *
之类的扩展
bash -f
我想在 运行 时输入一些命令行参数。喜欢
./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 *
.
这是什么原因?还是我哪里错了?
Shell 有一个名为 globbing 的功能,它们将某些模式(例如 *
)扩展到匹配文件。如果在当前目录中有以下内容:
file1 file2 somethingelse dir1
然后调用:
any_program *
将等同于:
any_program file1 file2 somethingelse dir1
或者如果你这样做:
any_program fi*
它将等同于:
any_program file1 file2
这是shell的一个特点。你的C程序很乖
由于 shell 不同,我们假设您使用的是 bash
。为防止 bash
执行扩展,您应该引用该参数。例如:
any_program "fi*"
实际上会将 fi*
传递给您的程序,而不会将其扩展为 file1 file2
。
命令行解释器在将参数传递给您的程序之前将 *
字符作为通配符处理,就像您键入 DIR *
.
简单的解决方案是设计一个不被解释的有意义的参数。
您可以通过将 * 放在单引号中来防止 * 扩展为文件名,即
./program 2 4 '*'
这样您的程序将收到 3 个输入参数,其值为“2”、“4”和“*”(就 C 字符串而言)。
如果您正在使用 bash,请使用 -f
开关启动 shell 以关闭诸如 *
bash -f