Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++;? 如何有效地解析C++中的命令行? program -parameter1=value1 -parameter2=value2 -parameter3=value3_C++_Parsing_Command Line - Fatal编程技术网

如何在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文件,这可能是一个很好的答案。