命令行参数不递增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的主要内容,如果未能解决你的问题,请参考以下文章