有没有办法做到这一点?
如果我输入如下:test "1"2 3
,那么我想要argv[0]=test
,argv[1]=1
,argv[2]=2
,argv[3]=3
。但我有argv[1]=12
和argv[2]=3
。
答案 0 :(得分:3)
只需删除引文并使用
调用程序即可./test 1 2 3
您将分别在argv [1],argv [2]和argv [3]中找到1,2,3。
答案 1 :(得分:1)
你必须在“和之前2之后使用空格,因为空间是参数分隔符
答案 2 :(得分:0)
关于字面问题,
“有没有办法做到这一点?如果我有这样的输入:
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:\dev\test\0112] > foo 1 "2"3 [foo 1 "2"3] ← You have access to the quotes. 3 command line argument(s): 0: [foo] 1: [1] 2: [23] [H:\dev\test\0112] > _
从技术上讲,在Windows中,使用标准Windows命令解释器之一,您需要做的就是实现自己的命令行解析。
然而,在答案中要处理的话题太大了。
实际结果是,只需调用foo 1 2 3
而不是foo 1 "2"3
等程序。