如何将命令行参数传递给C程序

17
自从我学会编程以来,我就知道如何编写可以接受命令行参数的程序。但我不明白这些参数是如何获得值的。希望我没有弄混这两个概念,实参和形参是有区别的。一个实参(argument) 是在调用函数时传递给函数的值,例如foo(a,b,c),其中a、b和c是实参。而一个形参(parameter) 则是在函数被调用时所在函数中的变量。
那么我的问题是:一个人如何将命令行参数传递给程序?我了解如何读取这些参数,即argc是参数数量,argv是指向包含参数的字符串数组的指针等等。但我不知道如何为这些参数赋值。
我正在寻找关于C和C ++的信息。我是一个初学者。

2
这将是特定于操作系统的,但在类Unix系统上,您可以查看exec()函数系列的man页面 - 这通常是命令shell使用已从命令行解析的参数。 - Chris Stratton
"我从未使用过这个功能,因为我不知道如何将这样的参数传递给程序。" - 两句话前:"自从我学会编程以来,我就知道如何编写一个接受命令行参数的程序" - 现在 真相是什么? 此外,我觉得你似乎没有经历过初学者C++教程的第一章,这个内容很早就被描述了。" - user529758
那是事实。我不认为它表达得很清楚。我想知道如何向程序传递参数,而不是参数!我希望知道值如何作为参数传递给程序的参数!换句话说,用户如何将其参数传递给程序?正如Yu Hao、TGH和Nobilis所说,他们提供了我需要的信息。 - user2213764
1
@user529758 我想我应该澄清一下(三年后)。当我发布这个问题时,我根本不知道如何向程序传递命令行参数。无论我读过什么课程或书籍都没有详细说明如何做到这一点。我所做的一切都是在像VS Express这样的IDE中完成的。Chris Stratton,我可以保证我那时候不知道man页或exec()系统调用是什么。不过现在我知道了! :) 我不认为当时我曾经使用过Linux。 - user2213764
1
可能是What does int argc, char *argv[] mean?的重复问题。 - jww
4个回答

13

在Windows环境中,您只需要像这样在命令行中传递它们:

myProgram.exe arg1 arg2 arg3

argv [1] 包含 arg1 等参数。

主函数如下:

int main (int argc, char *argv[])

1
此外,您的main函数声明应为int main(int argc, char *argv[]),您应该能够获取argv[1]argv[2]等参数。 - vee

10

在*nix系统上:

$ ./my_prog arg1 arg2

在Windows命令行中:

C:\>my_prog.exe arg1 arg2

在这两种情况下,假设 main 被声明为:

int main (int argc, char *argv[])

argc将是一个值为3的int型变量,argv [1] =“arg1”argv [2] =“arg2”,此外 argv [0]将会是程序的名称,my_prog

命令行参数通常由空格分隔,如果您希望传递一个带有空格的参数,例如hello world,请使用双引号:

$ ./my_prog "hello world"

2
在*nix系统中,有一个非常好用的工具可以让你以一种非常简单明了的方式解析命令行标志和参数。该页面上有一个很好的使用示例。
然后,您可以以非常标准化的方式运行程序并传递参数: $ ./my_app -a -b -c argument1 argument2 您可以自己解析它们而不使用该工具,但如果您想使您的应用程序对其他人有用,那么使其符合规范绝对值得付出努力。

1

只需点击开始菜单并在搜索索引中键入cmd...按回车键..现在在cmd窗口中输入以下命令... "program_name arg1 arg2"(不带引号)并按回车键...就完成了! 和


请尝试在您的答案中添加一些新行,这里稍微难以阅读,您可能还想注意这仅适用于Windows。但是加1因为您是正确的。 - Vality

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