c_str()返回值不匹配const char *

时间:2015-11-10 15:43:35

标签: c++ string

c_str()返回一个const char *,我假设以下代码打印"等于",但它没有。

有人可以向我解释我错在哪里吗?

string xx = "hello";
const char* same = "hello";

const char* buf = xx.c_str();

if (buf == same)
{
    cout << "equal" << endl;
}

5 个答案:

答案 0 :(得分:5)

  

我会假设以下代码打印&#34;等于&#34;

这是一个错误的假设。 std::string将文字数据复制到其内部缓冲区,因此指针会有所不同。

如果您想比较数据而不是指针,请不要使用c_str()并直接将const char*string进行比较 - 重载的比较运算符将会做你期望的事。

答案 1 :(得分:3)

对于operator==

const char*不进行字符串比较,它会直接比较指针。 xx使用的缓冲区与same指针不同,因此它们不相等。

要与std::stringconst char*进行字符串比较,您只需使用std::string提供的运算符:

if (xx == same)
{
    cout << "equal" << endl;
}

答案 2 :(得分:1)

Operator ==指针的

char*比较指针本身,而不是它们指向的字符串。

如果你想猜测std :: string,你需要使用比较例程,如下所示:

if (strncmp(buf, same, xx.size())
...

答案 3 :(得分:0)

buf == same不是比较字符串而是比较指针的地址。由于它们是两个不同的变量,因此它们将具有两个不同的地址。如果您需要比较char*const char*,那么您可以使用std::strcmp

答案 4 :(得分:0)

您正在比较两个指针的值,永远不会相等。 same指向只读内存,c_str返回的指针是std::string对象的当前数据缓冲区,保证附加空终止符。

可以xx == same:这是因为std::string使用适当的数据类型重载==。或者,也许不那么优雅,你可以在两个指针上使用std::strcmp