這是我用C++編寫的第一個更大的東西,我無法將自己的頭圍繞在我偶然發現的問題上。我讀從工藝存儲器串用下面的片段:從進程內存中讀取文本塊的分析行
auto entries = std::vector<std::string>();
auto msg_node_addr = reader.readPtr(tab_msg_data_struct +
DATA_STRUCT_NODE_OFFSET);
/*
* Loop through message nodes,
* and retrieve information at given offset.
*/
while (msg_node_addr != 0x0) {
auto msg_content_ptr = reader.readPtr(msg_node_addr +
NODE_CONTENT_PTR_OFFSET);
auto msg_content = reader.readStr(msg_content_ptr, 255);
auto has_timestamp = !msg_content.empty()
&& std::isdigit(msg_content[0])
&& std::isdigit(msg_content[1])
&& msg_content[2] == ':';
if (has_timestamp) {
entries.emplace_back(msg_content);
}
// Advance to next node.
msg_node_addr = reader.readPtr(msg_node_addr +
DATA_STRUCT_NODE_STEP_OFFSET);
}
駐留在返回的條目的向量的函數。 每個條目爲以下形式:
12:31 Loot of a <creature>: <loot>
我調用該函數,得到消息的當前塊,並從中獲取需要的值。現在,當我再次打電話時,總會有一些我已經注意到的,新的。
例如,這將是第一次調用後的結果:
15:30 Loot of a <creature>: <loot>
15:30 Loot of a <creature>: <loot>
15:31 Loot of a <creature>: <loot>
而這之後,第二個:
15:30 Loot of a <creature>: <loot> <- Old value.
15:30 Loot of a <creature>: <loot> <- Old value.
15:31 Loot of a <creature>: <loot> <- Old value.
15:31 Loot of a <creature>: <loot> <- New one.
15:32 Loot of a <creature>: <loot>
我怎麼能放棄已經被解析字符串?比較時間戳似乎不是一種選擇,因爲它們甚至不包括秒。
我不認爲你的代碼是否有足夠的周圍的電話,來電等能夠正確回答問題。我想說的是做一些事情,比如make'msg_node_addr'靜態或者在'reader'中放一個'last_accessed_addr',但是我對其餘的代碼或者設計知之甚少。 – user2475059
@ user2475059'reader'只是一個圍繞WinAPI調用的包裝類。我想在最後一次通話中標出我「起飛」的信息,並在下一次通話中從那一時刻開始。 – adrift
同樣,我對代碼的結構還不夠熟悉,但我認爲我會採取的方法是隻是以某種方式存儲'last_accessed_addr',然後只返回所有內容。即使如此,有很多方法可以做* *(靜態函數範圍變量,類成員變量,某種返回值跟蹤,將該字符串與其在進程中的地址捆綁在一起並使用輔助函數進行計算),所以沒有其他代碼來了解哪種方式可能是最好的,我卡在這裏。 – user2475059