Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++;11命令行参数分离_C++_C++11_Parameter Passing - Fatal编程技术网

C++ c++;11命令行参数分离

C++ c++;11命令行参数分离,c++,c++11,parameter-passing,C++,C++11,Parameter Passing,我对c++11非常陌生,我不太明白如何将命令行参数解析为argv指针 我有以下代码: int main(int argc, char* argv[]) { std::string curr_arg = ""; std::string str_base = ""; std::string str_subs_file = ""; std::string str_subs = ""; for(int i = 1; i < argc; i++) {

我对c++11非常陌生,我不太明白如何将命令行参数解析为argv指针

我有以下代码:

int main(int argc, char* argv[])
{
   std::string curr_arg = "";

   std::string str_base = "";
   std::string str_subs_file = "";
   std::string str_subs = "";

   for(int i = 1; i < argc; i++)
   {
       curr_arg = argv[i];

       if(curr_arg == "-b" || curr_arg == "--base")
       {
           str_base = argv[++i];
       }
       else if(curr_arg == "-f" || curr_arg == "--file")
       {
           str_subs_file = argv[++i];
       }
       else if(curr_arg == "-s" || curr_arg == "--subs")
       {
           str_subs = argv[++i];
       }
       else
       {
           std::cout << "Argument '" << argv[i] << "' is not recognised." << std::endl;
           return -1;
       }
   }
}
intmain(intargc,char*argv[])
{
std::字符串curr_arg=“”;
std::string str_base=“”;
std::string str_subs_file=“”;
std::string str_subs=“”;
对于(int i=1;iSTD::CUT

你不是面对C++的问题,而是你的命令shell。最可能是因为你的shell把分号当作命令分隔符。 shell将命令解释为

/subs-b base-sa=1,2,3
,然后检测分号并解释下一个命令,即
b=4,5,6
,与
c=6,7,8
相同

它与键入基本相同(在大多数Unix shell上都可以使用):

这将打印“abc”,休眠5秒,然后打印“def 5秒后”

解决方案: 要获得所需的内容,您可以用引号将零件
a=1,2,3;b=4,5,6;c=6,7,8
封装起来,如:

./subs -b base -s "a=1,2,3;b=4,5,6;c=6,7,8"
或者,您也可以像这样避开分号:

./subs -b base -s a=1,2,3\;b=4,5,6\;c=6,7,8

两个版本都应该与大多数(如果不是全部)UNIX shell一起工作,也可以在Windows CMD中使用。我想,

< p>你没有面临C++的问题,但是你的命令shell。这很可能是因为你的shell采用分号作为命令分隔符。 shell将命令解释为
/subs-b base-sa=1,2,3
,然后检测分号并解释下一个命令,即
b=4,5,6
,与
c=6,7,8
相同

它与键入基本相同(在大多数Unix shell上都可以使用):

这将打印“abc”,休眠5秒,然后打印“def 5秒后”

解决方案: 要获得所需的内容,您可以用引号将零件
a=1,2,3;b=4,5,6;c=6,7,8
封装起来,如:

./subs -b base -s "a=1,2,3;b=4,5,6;c=6,7,8"
或者,您也可以像这样避开分号:

./subs -b base -s a=1,2,3\;b=4,5,6\;c=6,7,8

两个版本都应该与大多数(如果不是全部)UNIX shell以及Windows CMD一起工作,我想。

<代码>;< /C>是大多数shell中的命令分隔符。这与C或C++无关。哦,好吧,谢谢你的快速回答!我只是想,因为它没有什么困难,它是一个过多的代码<代码>;< /C>是大多数shell中的命令分隔符。这与C或C++无关。哦,好的,谢谢你的快速回答!我只是想,因为这没有什么真正的困难,这将是一个过度的杀手哦,我根本没有想到这一点…谢谢你的回答!然后我要么按照你提到的那样做,要么必须使用另一个分隔符…哦,我根本没有想到这一点…谢谢你的回答!然后我按照你提到的那样做将其删除或必须使用另一个分隔符。。。