0

例如,我有一些缓冲区: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)写出我需要的部分。

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

4

1 回答 1

1

应该这样做:

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和自定义仿函数来检查字符是否为'or"并根据需要转义...

于 2011-08-19T14:41:42.967 回答