c++ - 在 MSVC 中解析命令行

标签 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("");
    }

}

已测试该程序,但我似乎无法阅读最后一个参数。我程序中参数的打印值是

folder : testvid
begin  : 10000
end    : -89456273

就是想不通哪里出了问题。这里需要一些帮助。谢谢

最佳答案

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

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()

关于c++ - 在 MSVC 中解析命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27933655/

相关文章:

c++ - C++ 中的垃圾收集——为什么?

c++ - std::function 和 lambda 参数的段错误

c++ - C++中的平台无关/dev/null

python - 在 Python 中将反斜杠作为命令行参数处理

c - 如何使用命令行参数输入数据并将数据转换为大写

c++ - G.711 C++ 实现

visual-c++ - 为什么 _wtoi 函数中 wtoi 前面有一个下划线,而 ansi 版本是 atoi?

c - 编写 Tcl C 扩展共享库 [链接错误]

c++ - 我怎样才能像使用 wistream 从文件中读取一样从内存中读取?

windows - 无法在 Windows 命令外壳中转义空格