我有下一个代码:
#include "CmdLine.h"
void main(int argc, TCHAR **argv)
{
CCmdLine cmdLine;
// parse argc,argv
if (cmdLine.SplitLine(argc, argv) < 1)
{
// no switches were given on the command line, abort
ASSERT(0);
exit(-1);
}
// test for the 'help' case
if (cmdLine.HasSwitch("-h"))
{
show_help();
exit(0);
}
// get the required arguments
StringType p1_1, p1_2, p2_1;
try
{
// if any of these fail, we'll end up in the catch() block
p1_1 = cmdLine.GetArgument("-p1", 0);
p1_2 = cmdLine.GetArgument("-p1", 1);
p2_1 = cmdLine.GetArgument("-p2", 0);
}
catch (...)
{
// one of the required arguments was missing, abort
ASSERT(0);
exit(-1);
}
// get the optional parameters
// convert to an int, default to '100'
int iOpt1Val = atoi(cmdLine.GetSafeArgument("-opt1", 0, 100));
// since opt2 has no arguments, just test for the presence of
// the '-opt2' switch
bool bOptVal2 = cmdLine.HasSwitch("-opt2");
.... and so on....
}
我实现了CCmdLine类,这个主要是如何使用它的例子。 我很难理解如何获得输入值。我试图从控制台用scanf读取它们,但是argc不会增加并导致读取错误。
我是c ++的初学者,我想知道是谁让这段代码有效。
谢谢。
答案 0 :(得分:1)
Argc
和argv
仅包含程序启动时传递的参数。因此,如果您使用myapp.exe option1 option2 option3
执行此操作,而不是使用argv
执行该操作:
//<--argv[0]
//<--argv[1]
//<--argv[2]
//<--argv[3]
简而言之,当一个程序启动时,main的参数被初始化以满足以下条件:
argc
大于零。argv[argc]
是一个空指针。argv[0]
到argv[argc-1]
是表示实际参数的字符串的指针。argv[0]
将是包含程序名称的字符串,如果不可用,则为空字符串。 argv
的剩余元素表示提供给程序的参数。 您可以找到更多信息,例如here。
所有尝试稍后阅读输入(使用cin
,scanf
或其他任何内容)都不会将输入值保存到argv
,您需要自己处理输入。< / p>
答案 1 :(得分:0)
在运行程序时从命令行传递输入值 e.g
program_name.exe arg1 arg2
答案 2 :(得分:0)
这很简单:
void main(int argc, char **argv)
{
std::string arg1(argv[0]);
std::string arg2(argv[1]);
}