使用 TinyXML2 将字符串保存在 xml 文件中

Saving a string in xml file with TinyXML2

提问人:MatthieuCross 提问时间:4/4/2023 最后编辑:Andrew TruckleMatthieuCross 更新时间:4/20/2023 访问量:107

问:

我几乎是从C++开始的,在制作一个简单的控制台程序时遇到了一个我无法解决的问题。我到处寻找解决方案,但没有找到,所以我会试着问。

我想用 将数据从字符串保存到 xml 文件中,但它只需要数组。SetText()char

我有一个 for “person”,看起来像这样:struct

struct person {
    int Id = 0; 
    string Name; 
    char cname[20]; 
    string LastName;
    char clastname[20]; 
    int Age; 
};

输入人员后,我可以保存为 XML。通过循环,我拯救了每个人。for

此代码来自一个循环。for

//save name
string pName = p.Name; 
XMLElement* pername = doc.NewElement("pname");   
pername->SetText(p.cname);
pers->InsertEndChild(pername);

它工作正常。但是在加载时,它只填充字符串,而不是 .因此,再次保存时,加载的人员姓名未正确保存。Namechar cname

这就是我加载名称的方式......

XMLElement* p_name = p_person->FirstChildElement("pname");
        string pname = p_name->GetText();
        nPerson.Name = pname;

所以我正在考虑 2 种不同的解决方案。

  1. 直接从字符串 Name 保存,并从 person 结构中完全删除 cname。
  2. 加载时,以某种方式将字符串转换为 char 数组,这样我就可以毫无错误地重新保存。

我希望这个问题是可以理解的。我很抱歉,但英语不是我的第一语言:)

我尝试在保存之前将字符串转换为数组...char

const int namelength = pName.length();
char* char_array_name = new char[namelength + 1];
char_array_name[namelength] = '\0';

for (int i = 0; i < namelength; i++)
{
    char_array_name[i] = pName[i];}
    pername->SetText(char_array_name);

...但它只保存名称的第一个字母。

我尝试在加载后进行转换,但也无法完成。在发布问题之前,我花了很多时间,但正如我所说。我是初学者,所以也许答案是显而易见的,我只是看不到。


解决

只需使用 .这将返回一个 . 作为一个初学者,我把事情搞得太复杂了。一个切中要害的答案帮助我得到了它。再次感谢 user20716902 :)pName.c_str()const char *

C++ 控制台 类型转换 保存 tinyxml2

评论

1赞 user20716902 4/4/2023
只需使用 This 将返回一个pName.c_str()const char *
0赞 MatthieuCross 4/4/2023
谢谢!它实际上解决了问题!我以前把事情搞得太复杂了c_str。
0赞 UndergroundCoding 4/5/2023
虽然该问题已通过使用 修复,但值得一提的是,您只将名称数据加载到 ,但不会将其复制到 ,因此将始终是一个空数组。c_str()pNamecnamecname
0赞 MatthieuCross 4/5/2023
我知道那件事。我实际上只使用 cname 保存到 xml.Consloe 输入现在保存到字符串变量 Name(而不是像以前那样的 cname)。我将其从人员结构中删除,现在仅使用字符串名称,这对于我在这里需要的东西很好。谢谢

答: 暂无答案