如何在C++程序中使用命令行参数?

4
我知道要使用命令行参数,我需要这样做。
int main(int argc, char *argv[])
现在我读到的大多数有关输入命令行参数的文档都解释了这种情况,类似于:
命令行参数是在命令行操作系统(如DOS或Linux)中在程序名称之后给出的,并从操作系统传递给程序。
所以我知道打开程序的唯一方法就是像平常一样打开它,可以通过开始调试或打开exe文件实现
现在看起来,要使用命令行参数,必须以不同的方式打开程序,使用命令行(例如Windows命令提示符),然后在程序名后面输入参数。
那么我的问题是
我如何使用命令行打开我的程序,如何在程序名称之后输入参数?

2
虽然略微不相关,但如果您需要在命令行解析中进行任何重型操作,建议您调查Boost Program_options库。它使得重新排序和定义标志的功能变得非常简单。 - paulrehkugler
9个回答

6

为了简单起见,我会假设你正在使用Windows 7。

最简单的方法是打开一个DOS窗口,然后将应用程序拖放到其中。这将插入可执行文件路径。随后,您可以开始输入要传递给它的命令行参数。最终它应该看起来像这样:

C:\Users\cscott> "C:\Users\cscott\Documents\myApp.exe" argument1 argument2

注意:正如评论中提到的,这在Windows Vista上不起作用,我在写作时没有意识到这一点。

2
如果您正在自己输入(且您的文件夹中没有空格),则不需要引号,但是如果您将其拖放到提示符中,则会自动插入它们,以防万一。 - Tsubashi
你为什么要重写这部分 C:\Users\cscott? - Mohamed Ahmed Nabil
最后一个问题,为什么输入以下内容,C:\Users\cscott>"C:\Users\cscott\Documents\myApp.exe"与输入以下内容相同,C:\Users\cscott> "Documents\myApp.exe"。 - Mohamed Ahmed Nabil
1
C:\Users\cscott> 这部分告诉我当前所在的目录。我可以通过输入 cd 目录名称 来更改它。因此,我也可以输入 cd Documents 然后输入 myApp.exe arg1 并获得相同的结果。 - Tsubashi
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/16312/discussion-between-cscott-and-mohamed-ahmed-nabil - Tsubashi
显示剩余6条评论

4
我假设您正在使用一款集成开发环境(IDE),并猜测它是Visual Studio。如果我猜对了,有两种方法可以实现您的目标 - 第一种,打开包含已构建可执行文件的文件夹 - 默认情况下,它将位于{解决方案目录}/{项目目录}/bin/{生成配置}。在那里运行命令行。另一种选择是打开项目属性,在“调试”选项卡下(在VS 2010中 - 根据版本而异)将命令行标志放入标记为“命令行参数”的框中。

2

以下是传递参数给程序的几种方式:

  • 打开您的命令提示符(例如在Windows上的cmd.exe或PowerShell),然后键入:your_program.exe arg1 arg2 arg3
    您可以在快捷方式或脚本(如批处理或sh脚本)中执行相同的操作。

  • 编辑IDE中的运行配置。
    例如,Eclipse允许您单独为每个运行配置设置命令行参数。这有助于开发和调试。

  • 在Windows上,将一个文件拖放到可执行文件上。拖动的文件名将作为命令行参数传递。

  • 在Windows上,将文件名扩展名与文件类型关联(使用assoc命令),并将该文件类型与运行程序的命令关联(使用ftype命令)。现在,当打开此类文件时,无论是在命令解释器中还是通过双击打开,背后发生的都是使用该文件路径作为参数运行您的程序。

  • 从另一个程序以变量的形式运行可执行程序并传递参数。
    例如,在Python中:
    subprocess.call(['my_program.exe','arg1','arg2'])


1
在Visual Studio 2008中,命令参数位于项目属性->配置属性->调试->命令参数中。(在此省略文件名) - Mooing Duck
@MooingDuck,我按照您建议的相同步骤进行操作,但是如何输入文件夹路径,对于我的不同类别的文件夹,例如一个文件夹D:\oranges\;和另一个D:\mangoes\;等等? - Rocket
1
@Ahmad:我不确定你在问什么。如果你想传递多个参数,使用"D:\oranges\" "D:\mangos\" - Mooing Duck
@MooingDuck 两个参数之间应该有空格还是; - Rocket
1
@Ahmad:命令行参数由空格分隔。如果一个参数包含空格,请用引号括起来。这在本页的每个答案中都有明确的演示。 - Mooing Duck

1

在Windows中,您必须使用命令提示符导航到可执行文件位置,并通过输入Myexe.exe first_arg second_arg来运行它。

另一种方法是右键单击exe文件,在文件设置中指定一些命令行参数,以便在双击打开时提供给它。

还有一种方法是编写一个简单的批处理脚本,只需调用您的程序,如C:/Full/Path/To/Your/Program/app.exe first_arg second_arg并运行它。

在Visual Studio或您喜欢的IDE中,您将在项目设置中有选项,可以在从IDE内部执行程序时为您的程序指定一些命令行参数。


1

这是我在Linux中使用的一个简单示例

./myprogram args1 args2

你可以像这样解析它

int
main (int argc, char **argv)
{
  if (argc >= 2) {
     std::string param(argv[1]);
  }
  ///etc
}

0

您可以通过打开命令提示符并将其切换到路径,然后输入exe名称和参数来执行此操作:

 eg: bob.exe bob dylan

如果你的exe文件是bob,两个参数分别是bob和dylan...

...或者你可以创建一个快捷方式,右键点击,选择属性,快捷方式,然后将参数添加到目标字段的末尾。

"C:\bob.exe" /bob dylan

可能会有一个选项在你的IDE中,这取决于它是什么。

0

你可以在命令提示符中启动时编写,可以创建快捷方式并在名称后添加参数,在某些IDE调试时可以添加参数,或者使用一些参数调用其他程序来调用你的程序。


0

有些东西将要启动你的程序。由这个东西来传递参数。所有常见的shell都会解析命令行(虽然不总是以相同的方式),以向你呈现参数。在Windows下,单击桌面和任务栏上的按钮将打开一个配置窗口,其中有一个“快捷方式”选项卡,您可以在其中输入命令行作为“目标:”。在Unix下的rc文件(在启动时执行)基本上是shell脚本,而cron文件(定时启动)也需要命令行(而不仅仅是独立的命令)。等等。

在其他情况下,您可以将文件类型(扩展名)映射到一个命令,当您单击该类型的文件或下载它时,将执行该命令。在这种情况下,如果没有其他选择,您至少会得到文件的完整路径。

在极少数情况下,您只能获取文件名,编写自己的shell脚本以在调用程序时添加额外的参数相当容易。


0
<path of your program> <Arguments separated by space>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接