2012-02-23 83 views
-1

看到documentation of XmlDocument::parse(Ch*) in RapidXml,我還想知道字符緩衝區是'非常量'。我不確定當緩衝區需要通過解析器的任何這種修改而增長時,通常如何工作。圖書館會不會增長?如果我要求它解析,它應該只是解析權利?否則它應該被稱爲ParseAndPossibleModifyButLetMeKnowIfYouHadToRegrowTheBufferInWhichCaseHeyCheckThisFlagAndCopyThisPointer或類似的東西。RapidXML API可以增加緩衝區嗎?

我錯過了什麼?我想了解這個庫,因爲我想要的東西很容易用C++打開和附加/編輯xml文件,但是如果有更簡單/更好的替代品請不要猶豫,提出這樣的建議作爲答案!

+0

至於替代方案,[我們有一個問題](http://stackoverflow.com/questions/9387610/what-xml-parser-should-i-use-in-c)。 – 2012-02-23 04:49:50

回答

1

RapidXML盡最大努力成爲就地解析器。當它不能時,它將分配內存(鏈接到xml_document<>的生存期),但僅在必要時分配。由於XML讀取,字符串必須實際增長的情況非常罕見。

它會修改字符串的內容(除非您設置非修改標誌),並且其對象將保持對該字符串的引用。所以你需要確保緩衝區能夠存活足夠長的時間。但除此之外,沒有什麼可擔心的。

+0

只有在必要時它意味着什麼?一個緩衝區增長可能實際上分配給一個新地址,所以舊的指針可能失效; rapidXml在發生這種情況時如何給我指向新緩衝區的指針? – lurscher 2012-02-23 17:38:51

+0

@lurscher:緩衝區*不能*增長。但是,在某些情況下,RapidXML的字符串轉換可能希望使字符串大於其位置。因此,它會在內部分配* new *內存來存儲該字符串,因爲該字符串不能再進行修改。新的內存與'xml_document <>'關聯。 – 2012-02-23 18:02:56

+0

哦!好的,所以如果在文檔末尾附加一些xml節點,例如xml_document :: print()可能會返回一個新的緩衝區?有沒有辦法讓它直接打印到文件? – lurscher 2012-02-23 18:06:11

1

Rapidxml永遠不需要增長緩衝區。幸運的是,UTF8編碼的XML總是在字符串周圍有足夠的空間來插入終止的空字符並擴展內置的字符實體。

所以唯一修改的是緩衝區的內容,而不是它的大小。

相關問題