为了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)
会写出我需要的内容。
但两者的最佳解决方案是什么?
答案 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)
我认为这将是何时使用正则表达式的完美示例。