解析MSVC中的命令行

时间:2015-01-13 23:51:44

标签: c++ visual-c++ command-line-arguments stringstream

不是真的要求解析命令行争论,而是要在

中读取它们的代码(C ++)

我在MSVC2010中写过。选择Project \ DEbugging \ Command Line Arguement),我写了以下内容

"testvid" 10000 15000

全部以空格分隔

对于我的代码读取,我使用了字符串流来在

中读取它们
string folder;
int begin;
int end;

if(argc = 4){
    std::stringstream ssArgConverter;

    folder = argv[1];

    ssArgConverter << argv[2];
    if(ssArgConverter >> begin)
    {
       // success
       ssArgConverter.str("");
    }

    ssArgConverter << argv[3];
    if(ssArgConverter >> end)
    {
       // success
       ssArgConverter.str("");
    }

}

HAve测试了该程序,但我似乎在最后一个参数中有问题。我程序中参数的打印值是

folder : testvid
begin  : 10000
end    : -89456273

无法弄清楚出了什么问题。这里需要一些帮助。感谢

1 个答案:

答案 0 :(得分:1)

您需要清除字符串流,而不是将其内容设置为“”。

string folder;
int begin;
int end;

if(argc == 4){
    std::stringstream ssArgConverter;

    folder = argv[1];

    ssArgConverter << argv[2];
    if(ssArgConverter >> begin)
    {
       // success
       ssArgConverter.str("");
       ssArgConverter.clear();
    }

    ssArgConverter << argv[3];
    if(ssArgConverter >> end)
    {
       // success
       ssArgConverter.str("");
       ssArgConverter.clear();
    }
}

编辑:这个问题非常类似于:How to clear stringstream?,并且接受的答案有一个很好的解释。

所以你实际应该使用.str(“”)或.str(std :: string())和.clear()