我想解析具有获取值的特定格式的命令行选项。功能如下
C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0\Desktop
传递的参数是char* getCmdOption(char** begin,
char** end,
const std::string& option)
{
char** itr = std::find(begin, end, option);
if (itr != end && ++itr != end)
{
return *itr;
}
return (char*)"";
}
代码适用于所有选项并提供正确的输出,但如果我想提供getCmdOption(argv, argv+argc, "--optionName")
之类的值,则代码应该返回Application.exe --optionName surname="O Kief"
,而是返回surname="O Kief"
输入格式为"surname=O Keif"
,预期输出为Application.exe --optionName optionValue
逻辑可能有什么问题?我怎么处理我提到的案子?
答案 0 :(得分:2)
“”是获取命令解释器(cmd.exe)将整个双引号字符串视为单个参数的唯一方法。然而,遗憾的是,不仅保留了封闭的双引号(像往常一样),但是双重转义的双引号也是如此,因此获得预期的字符串是一个两步的过程;例如,假设双引号字符串作为第一个参数传递。
Application.exe --optionName option =“name”删除封闭的双引号,然后将doubled双引号转换为单引号。 请务必在赋值部分周围使用括号双引号,以防止对值进行不必要的解释。
虽然下面给出了一个精确的解决方案,但您可以访问this以深入解决问题(不完全是一个问题)
如果optionValue不包含空格,请将格式保留为
Application.exe --optionName "optionValue"
如果选项Value包含空格,则将引用中的东西包装为
Application.exe --optionName '"option Value"'