2011-08-19 24 views
0

對於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

目前還不清楚什麼是被要求在這裏.. – 2011-08-19 14:18:19

+0

他想要的東西解析。 – Lalaland

+0

最初,我想解析mysql客戶端數據包以獲得查詢 – vladimar

回答

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

我認爲這將是什麼時候使用正則表達式的完美例子。

+0

有沒有一個宗教崇拜者認爲正則表達式是一切的救贖? –

+0

這是一個「不同」問題的答案。如何從__- = Bill's Car = -__中提取Bill's Car。對於正則表達式來說,這將是最簡潔的答案。 – Lalaland

相關問題