如何在C++;? 如何有效地解析C++中的命令行? program -parameter1=value1 -parameter2=value2 -parameter3=value3
如何有效地删除参数和值的组合如何在C++;? 如何有效地解析C++中的命令行? program -parameter1=value1 -parameter2=value2 -parameter3=value3,c++,parsing,command-line,C++,Parsing,Command Line,如何有效地删除参数和值的组合 -parameter=value 我正在尝试使用此代码,但它无法正常工作: parameter[256], value[256], while ( --argc > 0 ) { if ( *argv[argc] == '-' ) { for ( char * text = argv[argc]; ; ) { switch ( * ( ++ text ) ) {
-parameter=value
我正在尝试使用此代码,但它无法正常工作:
parameter[256], value[256],
while ( --argc > 0 )
{
if ( *argv[argc] == '-' )
{
for ( char * text = argv[argc]; ; )
{
switch ( * ( ++ text ) )
{
case '=' :
{
*value = *( text );
break;
}
default:
{
*parameter = *text;
}
}
}
//Testing parameters and values
}
}
谢谢你的评论和改进。
你考虑过<代码> Boo::程序选项> /代码>或者如果你不能使用Boost,<代码> GooptyLoo> < /C> >
< p> <代码> * value = *(text);<代码>这行只写一个字符。 我建议您使用标准的C库来进行参数解析:有一个预先创建的函数,叫做GETopt。 我在许多基于C++的命令行应用程序中使用了TCLAP(),并对此非常满意。但是,它可能不会给您以正在查看的格式读取参数的所有灵活性,但仍然值得一看,这也是一个很好的建议。使用std::string
和find\u first\u of
等函数,您可以更透明地执行此操作,将不同的部分分离开来,这样做的好处是,每次find函数返回std::string::npos
,您就知道您得到了一个无效的参数。它不能正常工作是什么意思?它是否无法区分每个命令的各个部分?例如,我不知道应该如何填充值,因为您总是访问它的第一个字节,与参数相同。正如Mark B所回答的,我强烈建议使用库代码来解析参数。它看起来很简单,但是实际上有无数的角落要处理。你的代码看起来像C.,你真的愿意使用C++构造吗?字符串处理在C和C++中是不同的。<代码>值[256 ] < /代码>缓冲区溢出。GETOPT不是标准C库的一部分。不过,这是POSIX标准的一部分,只要您不必包含上千个其他boost文件,这可能是一个很好的答案。