对可能包含null \ 0的数据执行字符串操作

时间:2014-09-19 07:04:44

标签: c++ string null

我正在为IE实现一个可插入的MIME过滤器(这个问题涉及IInternetProtocol::Read(void*, ULONG, ULONG*)),我正在拦截传入的HTML,以便修改HTML。

HTML 通常 UTF-8编码,除了有一些\0(null)字符,并且位于char缓冲区内。我想在std::string实例中加载它,这样我就可以执行字符串操作,例如std::string::find以及插入内容(通过将子字符串复制到我注入的字符串周围的目标缓冲区中,类似这样:

string received( this->buffer );
size_t index = received.find("<p id=\"foo\">");
if( index != string::npos ) {

    memcpy( destination             , received              , index );
    memcpy( destination + index     , "Injected content"    ,    17 );
    memcpy( destination + index + 17, received.substr(index), received.size() - 17 - index );
} else {
    memcpy( destination             , this->buffer          , this->bufferSize );
}

问题是缓冲区可能包含空字节(这是我正在使用的网站的一个怪癖)。 \0字符值与find等字符串操作交互的程度如何? MSDN和CPlusPlus.com上的文档没有说明。

0 个答案:

没有答案