用引号写一部分缓冲区的最好方法是什么?

What is the best way to write a part of buffer with quoting?

本文关键字:方法 是什么 缓冲区 一部分      更新时间:2023-10-16

例如,我有一些缓冲区:const char* buf与下一个内容(mysql数据包):

72 00 00 00 select * from `db` where (`name` = "Bill's car")

和我需要写ostream只查询引用。因此,结果应该是下一个:

select * from `db` where (`name` = "Bill's car")

我知道,<< quote <<会报价,ostream.write(buf,len)会写我需要的部分。

但是什么是两者的最佳解决方案呢?

应该这样做:

std::copy(buffer + index_of_start_of_sql, buffer + index_of_end_of_sql, std::ostream_iterator<char>(std::cout, ""));

将缓冲区的内容一个字符一个字符地复制到输出流(在本例中为std::cout)。你不需要担心处理引号。

您唯一需要确保的是两个索引(sql块的开始和结束)是正确的。

注意:这将打印缓冲区中的内容,但不会转义引号。如果需要转义引号,则需要采用不同的方法。例如,使用for_each和自定义函子来检查字符是否为'",并在必要时进行转义…