我有一个库,其中包含一个默认的XML文件,该文件表示为一个const char *
逐个字节存储。
我希望用户能够请求此文件的句柄(作为 TiXmlDocument)。
目前,我正在尝试将此字符串defaultFile
(在其自己的头文件中定义)传递给TiXmlDocument.Parse()
来执行此操作。 Parse()
正在向我传回一个垃圾指针(但不是空),这会导致尝试调用SaveFile()
时崩溃。
我可以通过使用以下方法将相同的defaultFile
写入文件来解决此问题:
FILE *file;
file = fopen("temp.prme", "w");
fprintf(file, "%s", defaultParameterFile);
fclose(file);
我使用将文件路径作为输入的构造函数创建一个新TiXmlDocument
。 这有效,但这不是一个真正的选择,因为我不想将文件保存到用户机器。
据我所知,构造函数所做的只是从文件中读取字符串,然后将其直接发送到Parse()
。 我检查了内存中传递的值,发现几乎没有差异。
使用构造函数方法时,必须在之后进行LoadFile()
。 在LoadFile()
中,传递给Parse()
的字符串不是以空结尾的。 即使defaultFile
是。 此外,所有新线路(defaultFile
被列为/r/n
,都列为nn
。
我尝试修改defaultFile
以匹配我从构造函数中看到的内容,但没有运气。 有什么建议吗?
对于它的价值,defaultFile
大致是这样布置的:
const char defaultFile[] = {
/* 0x00000000 */ 0x3C, 0x3F, 0x78, 0x6D,
...
};
它大约有 9000 行长,每行 16 个字节。
当直接调用Parse()
时,我在堆栈上分配TiXmlDocument
。 数据被其他函数调用损坏。 我解决了这个问题,一切正常。