C++ c++;11命令行参数分离
我对c++11非常陌生,我不太明白如何将命令行参数解析为argv指针 我有以下代码: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++) {
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;i STD::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++无关。哦,好的,谢谢你的快速回答!我只是想,因为这没有什么真正的困难,这将是一个过度的杀手哦,我根本没有想到这一点…谢谢你的回答!然后我要么按照你提到的那样做,要么必须使用另一个分隔符…哦,我根本没有想到这一点…谢谢你的回答!然后我按照你提到的那样做将其删除或必须使用另一个分隔符。。。