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

时间:2011-08-19 14:15:18

标签: c++ sql buffer ostream quoting

为了exaplme,我有一些缓冲区: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)会写出我需要的内容。

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

2 个答案:

答案 0 :(得分: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和自定义仿函数检查字符是'还是"并根据需要转义...

答案 1 :(得分:-1)

我认为这将是何时使用正则表达式的完美示例。