23,125
社区成员
发帖
与我相关
我的任务
分享
*** stack smashing detected ***: ./parsexml terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0xd23390]
/lib/tls/i686/cmov/libc.so.6(+0xe233a)[0xd2333a]
./parsexml[0x8048c22]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xc57bd6]
./parsexml[0x8048791]
======= Memory map: ========
00110000-00120000 r-xp 00000000 08:01 1710561 /usr/lib/gconv/libGB.so
00120000-00121000 r--p 0000f000 08:01 1710561 /usr/lib/gconv/libGB.so
00121000-00122000 rw-p 00010000 08:01 1710561 /usr/lib/gconv/libGB.so
0012c000-0012d000 r-xp 00000000 00:00 0 [vdso]
001fa000-00215000 r-xp 00000000 08:01 524313 /lib/ld-2.11.1.so
00215000-00216000 r--p 0001a000 08:01 524313 /lib/ld-2.11.1.so
00216000-00217000 rw-p 0001b000 08:01 524313 /lib/ld-2.11.1.so
002e8000-0030c000 r-xp 00000000 08:01 656185 /lib/tls/i686/cmov/libm-2.11.1.so
0030c000-0030d000 r--p 00023000 08:01 656185 /lib/tls/i686/cmov/libm-2.11.1.so
0030d000-0030e000 rw-p 00024000 08:01 656185 /lib/tls/i686/cmov/libm-2.11.1.so
0036c000-00455000 r-xp 00000000 08:01 1718725 /usr/lib/libstdc++.so.6.0.13
00455000-00459000 r--p 000e9000 08:01 1718725 /usr/lib/libstdc++.so.6.0.13
00459000-0045a000 rw-p 000ed000 08:01 1718725 /usr/lib/libstdc++.so.6.0.13
0045a000-00461000 rw-p 00000000 00:00 0
0056c000-0056f000 r-xp 00000000 08:01 1710357 /usr/lib/gconv/EUC-CN.so
0056f000-00570000 r--p 00002000 08:01 1710357 /usr/lib/gconv/EUC-CN.so
00570000-00571000 rw-p 00003000 08:01 1710357 /usr/lib/gconv/EUC-CN.so
0084e000-00972000 r-xp 00000000 08:01 1704368 /usr/lib/libxml2.so.2.7.6
00972000-00973000 ---p 00124000 08:01 1704368 /usr/lib/libxml2.so.2.7.6
00973000-00977000 r--p 00124000 08:01 1704368 /usr/lib/libxml2.so.2.7.6
00977000-00978000 rw-p 00128000 08:01 1704368 /usr/lib/libxml2.so.2.7.6
00978000-00979000 rw-p 00000000 00:00 0
009f2000-009f4000 r-xp 00000000 08:01 656183 /lib/tls/i686/cmov/libdl-2.11.1.so
009f4000-009f5000 r--p 00001000 08:01 656183 /lib/tls/i686/cmov/libdl-2.11.1.so
009f5000-009f6000 rw-p 00002000 08:01 656183 /lib/tls/i686/cmov/libdl-2.11.1.so
00c28000-00c3b000 r-xp 00000000 08:01 524486 /lib/libz.so.1.2.3.3
00c3b000-00c3c000 r--p 00012000 08:01 524486 /lib/libz.so.1.2.3.3
00c3c000-00c3d000 rw-p 00013000 08:01 524486 /lib/libz.so.1.2.3.3
00c41000-00d94000 r-xp 00000000 08:01 656177 /lib/tls/i686/cmov/libc-2.11.1.so
00d94000-00d95000 ---p 00153000 08:01 656177 /lib/tls/i686/cmov/libc-2.11.1.so
00d95000-00d97000 r--p 00153000 08:01 656177 /lib/tls/i686/cmov/libc-2.11.1.so
00d97000-00d98000 rw-p 00155000 08:01 656177 /lib/tls/i686/cmov/libc-2.11.1.so
00d98000-00d9b000 rw-p 00000000 00:00 0
00ef2000-00f0f000 r-xp 00000000 08:01 524530 /lib/libgcc_s.so.1
00f0f000-00f10000 r--p 0001c000 08:01 524530 /lib/libgcc_s.so.1get attribute abort
#include <stdio.h>
#include <stdlib.h>
#include <libxml/parser.h>
#include <libxml/xmlmemory.h>
#include<libxml/tree.h>
/********************************************************************
created: 2013/3/21
created: 15:34
filename: CreateXmlFile.c
author: LL
depend: libxml2.lib
build: CODEBLOCKS
purpose: 创建一个xml文件
*********************************************************************/
int main()
{
xmlDocPtr doc; //定义解析文档指针
xmlNodePtr curNode,curNode1; //定义结点指针(你需要它为了在各个结点间移动)
xmlChar *szKey; //临时字符串变量
char *szDocName;
szDocName = "CreatedXml.xml";
doc = xmlReadFile(szDocName,"GB2312",XML_PARSE_RECOVER); //解析文件
//检查解析文档是否成功,如果不成功,libxml将指一个注册的错误并停止。
//一个常见错误是不适当的编码。XML标准文档除了用UTF-8或UTF-16外还可用其它编码保存。
//如果文档是这样,libxml将自动地为你转换到UTF-8。更多关于XML编码信息包含在XML标准中.
if (NULL == doc)
{
fprintf(stderr,"Document not parsed successfully.\n");
return -1;
}
curNode = xmlDocGetRootElement(doc); //确定文档根元素
/*检查确认当前文档中包含内容*/
if (NULL == curNode)
{
fprintf(stderr,"empty document\n");
xmlFreeDoc(doc);
return -1;
}
/*在这个例子中,我们需要确认文档是正确的类型。“root”是在这个示例中使用文档的根类型。*/
if (xmlStrcmp(curNode->name, BAD_CAST "root"))
{
fprintf(stderr,"document of the wrong type, root node != root");
xmlFreeDoc(doc);
return -1;
}
curNode = curNode->xmlChildrenNode;
xmlNodePtr propNodePtr = curNode;
int i=0;
while(curNode != NULL)
{
//取出节点中的内容
if ((!xmlStrcmp(curNode->name, (const xmlChar *)"ServerIP")))
{
szKey = xmlNodeGetContent(curNode);
printf("ServerIP: %s\n", szKey);
xmlFree(szKey);
}
if ((!xmlStrcmp(curNode->name, (const xmlChar *)"CollectorID")))
{
szKey = xmlNodeGetContent(curNode);
printf("CollectorID: %s\n", szKey);
xmlFree(szKey);
}
if ((!xmlStrcmp(curNode->name, (const xmlChar *)"Circle")))
{
szKey = xmlNodeGetContent(curNode);
printf("Circle: %s\n", szKey);
xmlFree(szKey);
}
char UserID[10];
sprintf(UserID,"UserInfo--%d",i);
if ((!xmlStrcmp(curNode->name, (const xmlChar *)UserID)))
{
curNode1 = curNode->xmlChildrenNode;
if ((!xmlStrcmp(curNode1->name, (const xmlChar *)"ValveControllerID")))
{
szKey = xmlNodeGetContent(curNode1);
printf("ValveControllerID: %s\n", szKey);
xmlFree(szKey);
//删除一个节点
/* xmlNodePtr tempNode;
tempNode = curNode1->next;
xmlUnlinkNode(curNode1);
xmlFreeNode(curNode1);
curNode->xmlChildrenNode = tempNode;
// continue;
}*/
curNode1 = curNode1->next;
if ((!xmlStrcmp(curNode1->name, (const xmlChar *)"HouseArea")))
{ szKey = xmlNodeGetContent(curNode1);
printf("HouseArea %s\n", szKey);
xmlFree(szKey);
i++;
}
}
}
//查找带有属性attribute的节点
if (xmlHasProp(curNode,BAD_CAST "Type"))
{
propNodePtr = curNode;
}
curNode = curNode->next;
}
//查找属性
xmlAttrPtr attrPtr = propNodePtr->properties;
while (attrPtr != NULL)
{
if (!xmlStrcmp(attrPtr->name, BAD_CAST "Type"))
{
xmlChar* szAttr = xmlGetProp(propNodePtr,BAD_CAST "Type");
printf("get attribute = %s",szAttr);
xmlFree(szAttr);
}
attrPtr = attrPtr->next;
}
xmlFreeDoc(doc);
return 0;
}
<?xml version="1.0"?>
-<root><ServerIP>172.16.24.214</ServerIP><CollectorID>10-1-12</CollectorID><Circle>2</Circle><HeatMeterAddressID Type="hex">A0A1A2A3A4A5A6A7</HeatMeterAddressID>-<UserInfo--0><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--0>-<UserInfo--1><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--1>-<UserInfo--2><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--2>-<UserInfo--3><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--3>-<UserInfo--4><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--4>-<UserInfo--5><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--5>-<UserInfo--6><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--6>-<UserInfo--7><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--7>-<UserInfo--8><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--8>-<UserInfo--9><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--9>-<UserInfo--10><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--10>-<UserInfo--11><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--11>-<UserInfo--12><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--12>-<UserInfo--13><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--13>-<UserInfo--14><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--14>-<UserInfo--15><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--15>-<UserInfo--16><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--16>-<UserInfo--17><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--17>-<UserInfo--18><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--18>-<UserInfo--19><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--19>-<UserInfo--20><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--20>-<UserInfo--21><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--21>-<UserInfo--22><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--22>-<UserInfo--23><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--23>-<UserInfo--24><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--24>-<UserInfo--25><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--25>-<UserInfo--26><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--26>-<UserInfo--27><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--27>-<UserInfo--28><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--28>-<UserInfo--29><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--29>-<UserInfo--30><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--30>-<UserInfo--31><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--31>-<UserInfo--32><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--32>-<UserInfo--33><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--33>-<UserInfo--34><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--34>-<UserInfo--35><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--35>-<UserInfo--36><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--36>-<UserInfo--37><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--37>-<UserInfo--38><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--38>-<UserInfo--39><ValveControllerID>01020304050607</ValveControllerID><HouseArea>00.0</HouseArea></UserInfo--39>-<UserInfo-0</HouseArea></UserInfo--44>-<UserInfo--45><ValveControllollelveControllerID>
。 。 。 。 。 。
xml文件太大了, 上面只是一部分
char UserID[10];
sprintf(UserID,"UserInfo--%d",i);
char UserID[10]; // 才10个字节,太小了"UserInfo--"都超过了
改为
char UserID[100];