感谢您的答复。我在一个测试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。
问题:抱歉使用答案选项发布此。由于字符限制,无法将其作为评论发布。