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.exeargv[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

第一个参数需要注意的重要一点是,它可以用来区分主程序的不同行为,具体取决于程序名称(例如,使用符号链接可能会有所不同)。一个很好的示例是 gzipgunzip 的工作原理。

【讨论】:

以上是关于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[]) 解析

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

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