首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CommandLineToArgV逃逸

CommandLineToArgV逃逸
EN

Code Review用户
提问于 2012-03-14 02:01:17
回答 1查看 239关注 0票数 2

试图实现类似于CommandLineToArgV的东西:

代码语言:javascript
复制
template<typename InIter, typename OutIter>
inline InIter CmdLineToArgvWUnescape(InIter begin, InIter end, OutIter target)
{
    if (std::distance(begin, end) < 2 || *begin != L'"')
    {
        // ""s are required
        throw MalformedEscapedSequence();
    }
    ++begin; //Skip "
    std::size_t backslashCount = 0;
    for(; begin != end; ++begin)
    {
        switch(*begin)
        {
        case L'\\':
            backslashCount++;
            break;
        case L'"':
            if (backslashCount)
            {
                std::fill_n(target, backslashCount / 2, L'\\');
                *target++ = L'"';
                backslashCount = 0;
            }
            else
            {
                return ++begin;
            }
        default:
            if (backslashCount)
            {
                std::fill_n(target, backslashCount, L'\\');
                backslashCount = 0;
            }
            *target++ = *begin;
        }
    }
    throw MalformedEscapedSequence();
}
EN

回答 1

Code Review用户

发布于 2012-03-14 19:18:23

我的一个评论是添加一条关于它到底在做什么的评论。

即使在学习之后,我也不能百分之百地确定它的作用(我需要一些单元测试来感觉我理解它)。

我认为你想达到的目标是:

  • 将“转换为”
  • 将\\“转换为”
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/10005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档