这是我的代码:
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。谁教育我为什么?谢谢。
答案 0 :(得分:3)
这会比较指针,而不是内容。
您需要使用strcmp
:
if(strcmp("SRAD", name) == 0)
答案 1 :(得分:3)
您正在比较指针值,而不是字符串内容。指针(几乎肯定)不相等,即使字符串是。
使用std::string
,其中==
和其他运算符比较字符串内容:
#include <string>
std::string name = pAttr->Name();
if("SRAD" == name) // works as expected
或深入研究C库
#include <cstring>
if (std::strcmp(name, "SRAD") == 0)
答案 2 :(得分:1)
如果你甚至写下面的方式
if ( "A" == "A" ) { /* do something */ }
条件的结果可以是true或false。问题是在这种情况下,具有数组char[2]
类型的字符串文字将转换为指向其第一个元素的指针。并且编译器可以在不同的内存范围内存储相等的字符串文字,或者只存储相同字符串文字的一个表示。
因此在本声明中
if("SRAD" == name)
你正在比较字符串文字的第一个元素的地址&#34; SRAD&#34;以及指针名称指向的数组。
您应该使用标头strcmp
中声明的标准C函数<string.h>
。例如
if( strcmp( "SRAD", name ) == 0 ) /* ...*/;