int main(int argc,char **argv)[重复]
Posted
技术标签:
【中文标题】int main(int argc,char **argv)[重复]【英文标题】:int main(int argc, char **argv) [duplicate] 【发布时间】:2014-10-09 14:22:44 【问题描述】:我是 C++ 初学者,习惯于使用 int main() 进行编码,现在我正在使用:
int main(int argc, char **argv)
而且我不知道这行代码到底是什么意思。所以,我在互联网上查找了一些答案,我发现了这段代码:
std::cout << "Have " << argc << " arguments:" << std::endl;
for (int i = 0; i < argc; ++i)
std::cout << argv[i] << std::endl;
这显示了我的论点。
我运行应用程序,控制台显示:
有 1 个参数:
C:\Users\user\Documents\C++ Projects\Test\bin\Debug\Test.exe
然后它关闭应用程序,因为在这个循环之后我有一个基于 argc 值的 if else 语句。
因此,如果 argc 与 3 不同,它将运行 exit(0)
。
我的问题是:
为什么我的论点只是我自己位于调试路径上的应用程序?
我怎样才能得到多个论点?
【问题讨论】:
【参考方案1】:argc
是用于运行程序的参数数量
argv
是一个 char*
参数数组
argv[0]
是可执行文件的名称(在您的情况下,它是 Test.exe
)
argv[1]
是您传入的第一个参数(如果您传入了任何参数)。
所以如果你以Test.exe a b
运行你的程序,那么argc
将是3,而argv
的内容将是:
argv[0]
是Test.exe
argv[1]
是a
argv[2]
是b
【讨论】:
【参考方案2】:如果您从 Visual Studio 运行,您可以在项目属性中添加参数。右键单击正在运行的项目,选择属性。在 Debug 选项卡中,有一个 Command Line Arguments 输入框。在那里输入它们。
对于代码块,see here。
【讨论】:
另一个选项是创建一个 Windows 快捷方式并将它们添加到那里。如果有用的话,我可以添加一些步骤。我确定代码块有办法添加命令行参数:***.com/questions/11888528/… 非常感谢@clcto。我设置了程序参数,现在它正在工作:)【参考方案3】:argc
代表argument count
- argc 本身存储运行时传递的参数总数
argv
代表 argument value
- argv 本身存储参数本身。
第一个参数argv[0]
是您的(可执行)文件的绝对路径
之后,每个argv[n]
(n char* 字符串(即使你传递了一个数字)
就这些了。
【讨论】:
【参考方案4】:您可能会尝试在终端或命令行中运行您的应用程序,也许
.\Test.exe one two
那么argc
应该是3,argv[0]
可能是.\Test.exe
,argv[2]
是two
。我让你用你最喜欢的调试器来试验argv[1]
是什么。
(其实我不了解 Windows,但我正在将我在 Linux 上的知识转移到您专有的 Microsoft 操作系统)
请注意,在 Linux 或 Posix 系统上,如果您在命令行中使用 globbing,例如
/bin/ls -l a*
调用shell 将a*
扩展为单词序列,而扩展 序列由execve(2) 传递给/bin/ls
可执行文件。
有传言说在 Windows 上并非如此。一些 Microsoft 等效的 Crt0 可能会进行全局扩展。阅读 Microsoft 文档。
AFAIK,保证(至少在 Linux 和 Posix 系统上)argv[argc]
是 NULL
指针。
【讨论】:
【参考方案5】:int argc, char **argv
表示命令行参数。我的意思是,如果你通过 cmd/terminal 运行应用程序:
> mypath\test.exe a b c d
^ ^ ^ ^ these arguments
argv[0]
始终是可执行文件的路径。 argc
是参数的数量。
【讨论】:
抱歉,如何通过 cmd 运行我的应用程序?同样,我是 C++ 的初学者 :( 您是否尝试在某个终端外壳中运行您的程序?顺便说一句,安装 Linux 可能是值得的...... @BasileStarynkevitch 没有【参考方案6】:第一个参数始终是调用的程序名称,后面的参数是命令行上传递的参数。
换句话说,argv
复制了完整的命令行,称为:
myprog arg1 arg2
第一个参数需要注意的重要一点是,它可以用来区分主程序的不同行为,具体取决于程序名称(例如,使用符号链接可能会有所不同)。一个很好的示例是 gzip
和 gunzip
的工作原理。
【讨论】:
以上是关于int main(int argc,char **argv)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
main (int argc,char *argv[]) 或main (int argc,char **argv)区别
int main(int argc,char* argv[])详解
int main(int argc,char*argv[])
int main(int argc,char* argv[]) 解析