这是我的代码:
const TiXmlAttribute* pAttr = pElem->FirstAttribute();
const char* name = pAttr->Name(); // attribute name
const char* value = pAttr->Value(); // attribute value
float _D = 0.0;
if("SRAD" == name) // returns false here, but name is indeed "SRAD"
{
_D = atof(value);
}
问题是名称是"SRAD",但 if 条件返回 false。有人教育我为什么?谢谢。
这比较的是指针,而不是内容。
您需要使用strcmp
:
if(strcmp("SRAD", name) == 0)
您正在比较指针值,而不是字符串内容。指针(几乎肯定(不会相等,即使字符串相等。
要么使用 std::string
,==
和其他运算符会比较字符串内容:
#include <string>
std::string name = pAttr->Name();
if("SRAD" == name) // works as expected
或深入研究 C 库
#include <cstring>
if (std::strcmp(name, "SRAD") == 0)
如果你甚至这样写
if ( "A" == "A" ) { /* do something */ }
条件的结果可以是真,也可以是假。问题在于,在此条件下,具有数组char[2]
类型的字符串文本将转换为指向其第一个元素的指针。编译器可以将相等的字符串文本存储在不同的内存范围内,也可以仅存储相同字符串文本的一种表示形式。
因此,在此声明中
if("SRAD" == name)
您正在比较字符串文本"SRAD"的第一个元素的地址和指针名称指向的数组的地址。
您应该使用在标头 <string.h>
中声明的标准 C 函数strcmp
。例如
if( strcmp( "SRAD", name ) == 0 ) /* ...*/;