【问题标题】:Parse Command line arguments within a function解析函数中的命令行参数
【发布时间】:2014-08-20 00:05:44
【问题描述】:

这是我的要求-

我必须从表单中的命令行获取输入

-des <destIP> -prot <tcp/udp> -min <minutes>

有几个程序建议如何通过 main() 函数的 argc 和 argv 参数解析这些值。但我想要一个获取输入行然后解析它的函数。

函数是 -

void GetArguments()
{
    cout << "Enter arguments ..." << endl;
    cin >> inputStr;//eg: inputStr = "-des 127.0.0.1 -prot tcp -min 60"

    //code to parse the input arguments and get values of dest IP, protocol and time
}

如何获得我需要的值?

【问题讨论】:

  • 您需要将 main() 函数的参数传递给该函数 (GetArguments())。没有其他方法可以获取 输入行

标签: c++ visual-studio-2005 command-line-arguments


【解决方案1】:

使用CommandLineToArgvW()wchar_t*(例如从std::wstring)解析为可以循环的wchar_t*[] 数组,就像argv/argc 一样。例如:

void GetArguments()
{
    std::wstring inputStr;
    std::wcout << L"Enter arguments ..." << std::endl;
    std::wcin >> inputStr;

    int numArgs;
    LPWSTR *args = CommandLineToArgvW(inputStr.c_str(), &numArgs);
    if (args)
    {
        for (int i = 0; i < numArgs; ++i)
        {
            // use args[i] as needed...
        }
        LocalFree(args);
    }
}

这是一个特定于 Windows 的解决方案,因为您的问题已标记为 Visual Studio。如果您正在寻找纯 C++ 解决方案,则必须手动标记 inputStr,并根据需要将其拆分为空格和引号。有很多这样的例子。

【讨论】:

  • 我需要为 LPWSTR 和 CommandLineToArgvW() 包含什么标头?
  • 如果您阅读了我链接到的文档,它会告诉您CommandLineToArgvW()Shellapi.h 中声明。至于LPWSTR,则声明在WinNT.h中,包含在Windows.h中。
猜你喜欢
  • 2013-03-21
  • 2013-06-04
  • 1970-01-01
  • 2012-01-26
  • 2011-08-15
相关资源
最近更新 更多