感謝您的答覆。我在一個測試C++程序中對您的源代碼進行了實驗,並且運行良好。我注意到的一件事是std :: map類與Java Properties類非常相似。
我現在的目標是獲取每個名稱=值對,並將它們連接在C++字符串中,每個名稱=值對由\ r \ n分隔。
經歷過了一段時間後,我終於用下面的代碼上來,這似乎工作:
void DoTest()
{
const int bufferSize = 1024;
LPTSTR str_settings = new TCHAR[bufferSize];
// Keep the original pointer. Need to delete later.
LPTSTR str_settings_original = str_settings;
// Another string to keep all name=value pairs back to back separated by \r\n.
LPTSTR str_settings_concatenated = new TCHAR[bufferSize];
// I keep getting crash until I tried the following :
// put a NULL character at the beginning of str_settings_concatenated.
str_settings_concatenated[0] = NULL;
::GetPrivateProfileSection(_T("MySection"), str_settings , bufferSize, _T("MyIni.ini"));
std::string sett_string;
for (;*str_settings; str_settings += sett_string.length() + 1)
{
sett_string = str_settings;
// str_settings effectively points to the next name=value pair
// and this is what I really want. I take advantage of this
// and pack them back-to-back into str_settings_concatenated
// separated by \r\n.
strcat(str_settings_concatenated, str_settings);
strcat(str_settings_concatenated, "\r\n");
}
delete str_settings_original;
str_settings_original = NULL;
delete str_settings_concatenated;
str_settings_concatenated = NULL;
}
要點:
- 我用你的循環結構,以獲得每個名稱=值對在str_settings中。
- 在for循環的每次迭代中,str_settings似乎總是得到下一個名稱=值對,這對我來說很好,即使我真的不知道代碼是如何工作的(但非常感謝你)。
- 我創建了另一個C++字符串來存儲每個由\ r \ n分隔的每個名稱=值對。我用strcat()來做到這一點。
- 我最初得到了很多崩潰,str_settings_concatenated似乎沒有得到任何字符串。
- 我還記得,在C++中,我們必須使用new調用每個內存分配的刪除。我試過這個,但沒有幫助。然而,我從一位朋友那裏得到了一些建議,告訴我我應該在str_settings_concatenated的開頭加上一個NULL字符。
該代碼現在運行良好。如果您不介意,您是否也可以指出代碼中存在的其他錯誤?
再一次,非常感謝您的幫助。
David。
問題:抱歉使用答案選項發佈此。由於字符限制,無法將其作爲評論發佈。