命令行参数不递增inc argc

Posted

技术标签:

【中文标题】命令行参数不递增inc argc【英文标题】:Command line arguments not incrementinc argc 【发布时间】:2012-09-18 06:34:06 【问题描述】:

我是 C++ 新手,我正在尝试了解它是如何工作的。 所以我有下一个代码:

int _tmain(int argc, _TCHAR* argv[])

std::wcin.get();//for console window input
int i=1;
    // decode arguments
    if(argc < 2) 
        printf("You must provide at least one argument\n");
        exit(0);
    
    // report settings
    for (;i<argc;i++) printf("Argument %d:%s\n",i,argv[i]);

return 0;

查看 argc 和 argv 的工作原理。 但无论我在控制台中输入多少参数,argc 都不会增加。 它仍然是 1。 我知道 argv[0] 是程序名称。我的输入类似于:“aaa bbb ccc ddd”。 我相信这个 argc 应该是 5 对吗? 我究竟做错了什么 ?为什么它不会增加?

谢谢。

【问题讨论】:

你是如何将这些参数传递给你的程序的? 从控制台窗口,当它从 wcin.get() 弹出时;我输入参数,例如“abc efg xyz”。 @IonutDaniel 当程序的控制台打开时,命令行参数已经设置好了。到那时为时已晚。 @Ionut 这就是问题所在,参数不是那样传递的。看看下面的答案 【参考方案1】:

您似乎正在使用 MSVS(签名为 _tmain(int argc, _TCHAR* argv[]))。如果您从 IDE 运行代码,则需要在项目设置中指定参数,而不是在命令行中。

从命令行运行,如:

test.exe arg1 arg2

也可以正常工作。您所做的不会修改参数。

【讨论】:

嘿,谢谢现在它可以工作了。这非常有用。在这种情况下我还有另一个问题。我正在做这个“研究”,以便创建一个命令行解析器,其中的参数将被传递为:-switch1 argument1 argument2 -switch2 argument 等等。在这种情况下我可以使用这个设置吗? @IonutDaniel 此设置仅在您从 Visual Studio 运行程序时有效。如果您打算手动运行可执行文件,则必须使用命令行选项。 你能详细说明一下吗。这件事对我来说有点抽象。再次感谢。 @IonutDaniel 如果你告诉我你指的是哪个设置,是的。 我指的是命令行选项的使用。如何在设置参数之前从控制台窗口读取参数,以便解析输入。【参考方案2】:

调用 wcin.get() 不会影响 argv 或 argc。参数在程序启动时一开始就指定。它们在命令行中指定,紧跟在程序名称之后,以空格分隔。

【讨论】:

以上是关于命令行参数不递增inc argc的主要内容,如果未能解决你的问题,请参考以下文章

如何在C++中解析命令行参数

命令行运行PHP文件时如何传递参数?

c语言中命令行参数argc,argv[]详解

29.命令行参数

传递命令行参数示例代码 (C 和 Python)

关于int main(int argc, const char * argv[])的理解