我正在为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上的文档没有说明。