const char * if()与" SRAD"返回false

时间:2014-12-18 15:17:02

标签: c++ string char

这是我的代码:

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。谁教育我为什么?谢谢。

3 个答案:

答案 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 ) /* ...*/;