const char* TiXmlElement::Attribute( const char* name ) const
{
const TiXmlAttribute* node = attributeSet.Find( name );
if ( node )
return node->Value();
return NULL;
}
string XMLProcessor::getNodeAttribute(TiXmlNode *Tixmlnode, const char* const key)
{TiXmlElement * Tixmlment = Tixmlnode->ToElement();
if (Tixmlment != NULL)
{
return key==NULL ? "": Tixmlment->Attribute(key);
}
return "";
}
这是一段识别元素节点属性的代码。但是在调试的过程中老是运行错误。
自己的调试过程就是根据调用函数Tixmlment->Attribute(key);进行返回值的修该const char* bute = Tixmlment->Attribute(key);
也是自己水平有限啊!后面用cout<<"bute= "<<bute<<endl;进行返回值的打印,但是还是有错。这就让人费解了。万般无奈,最后在VS上进行测试,代码如下:
string XMLProcessor::getNodeAttribute(TiXmlNode *Tixmlnode, const char* const key)
{
TiXmlElement * Tixmlment = Tixmlnode->ToElement();
if (Tixmlment != NULL)
{
const char* bute = Tixmlment->Attribute(key);
printf("********3333333333333333333************** = %s\n",bute);
return key==NULL ? "": bute;
}
return "";
}
这次可以打印了为NULL。但是return返回时还是错误(运行崩溃)。这次我根据return的返回值进行了返回值的修改当返回NULL时用“ ”来代替,没错这次正常运行了!
string XMLProcessor::getNodeAttribute(TiXmlNode *Tixmlnode, const char* const key)
{
TiXmlElement * Tixmlment = Tixmlnode->ToElement();
if (Tixmlment != NULL)
{
const char* bute = Tixmlment->Attribute(key);
//cout<<"bute= "<<bute<<endl;
if(bute == NULL)
bute = "";
return key==NULL ? "": bute;
}
return "";
}
这次程序时正常运行下去了!之后在网上进行了问题的搜寻。确实有我这样的问题。
1.string 对象不能为NULL,NULL时指对象不存在即未分配内存,这估计算是访问非法内存了。为“”时对象已创建但无数据(只有\0)。
2.cout<<"bute= "<<bute<<endl;当bute为NULL时不能打印,估计是需要解引用吧!(强转一下倒是可以输出)。