解析c++命令行参数
Parsing C++ Command-Line Arguments
是否有办法做到这一点?如果我有这样的输入:test "1"2 3
,那么我想要argv[0]=test
, argv[1]=1
, argv[2]=2
, argv[3]=3
。但我有argv[1]=12
和argv[2]=3
去掉引号,用
调用程序./test 1 2 3
在argv[1]、argv[2]和argv[3]中分别可以找到1、2、3
必须在" 2 "之后和之前使用空格,因为空格是参数分隔符
关于文字问题,
”有办法做到这一点吗?如果我有这样的输入:
test "1"2 3
,那么我想要argv[0]=test
,argv[1]=1
,argv[2]=2
,argv[3]=3
从技术上讲,在任何shell和OS组合中都可以将引号传递给进程。
这尤其包括Windows。
// Windows-specific code.
#undef UNICODE
#define UNICODE
#include <windows.h>
#include <iostream>
#include <memory>
auto wide_main( int argc, wchar_t const* const* const argv )
-> int
{
using std::wcout; using std::endl;
wcout << "[" << ::GetCommandLine() << "]" << endl;
wcout << argc << " command line argument(s):" << endl;
for( int i = 0; i < argc; ++i )
{
wcout << " " << i << ": [" << argv[i] << "]" << endl;
}
return 0;
}
static void local_free( wchar_t** p ) { ::LocalFree( p ); }
auto main()
-> int
{
using std::unique_ptr;
int n_args = 0;
wchar_t** const raw_p_args = ::CommandLineToArgvW(
::GetCommandLine(), &n_args
);
if( raw_p_args == nullptr ) { return E_FAIL; }
try
{
unique_ptr<wchar_t*, void(*)(wchar_t**)> const p_args(
raw_p_args, &local_free
);
return wide_main( n_args, raw_p_args );
}
catch( ... )
{
throw;
}
}
示例测试:<>之前[H: 0112年测试 开发]比;foo 1 "2"3[foo 1 "2"3] ←您可以访问引号。三个命令行参数:0 (foo):1: [1]2: [23][H: 0112年测试 开发]比;_之前因此,从技术上讲,在Windows中,使用标准的Windows命令解释器之一,您需要做的就是实现您自己的命令行解析。
然而,这是一个太大的话题,不能在回答中讨论。
实际的结果是,只需调用您的程序像foo 1 2 3
而不是foo 1 "2"3
。
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 使用 C++ 将命令行参数拆分为参数/向量
- 如何在OMNET++中添加专门的命令行参数?
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 是否可以在命令行中将输入参数传递给可执行文件
- 命令行参数,cant 或两个变量
- 在 Windows 中使用 boost::p rogram_options 从命令行参数读取 Unicode 字符
- 如何在 Android/NDK 上将命令行参数从 gradlew.bat 传递到 Clang
- 编写一个将 LLVM IR 文件作为命令行参数的程序
- 通过命令行参数获取llvm ir文件时面临问题
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 从命令行获取参数时出现问题
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 命令行参数在不到 3 个 LOC 中 int?
- 在命令行参数中使用引号
- 使用参数 + stdout + stderr 从命令行调用 MFC 应用程序
- 在VS2013中使用devenv (C++)传递命令行参数argv
- 二进制数据作为命令行参数