c_str()返回一个const char *,我假设以下代码打印"等于",但它没有。
有人可以向我解释我错在哪里吗?
string xx = "hello";
const char* same = "hello";
const char* buf = xx.c_str();
if (buf == same)
{
cout << "equal" << endl;
}
答案 0 :(得分:5)
我会假设以下代码打印&#34;等于&#34;
这是一个错误的假设。 std::string
将文字数据复制到其内部缓冲区,因此指针会有所不同。
如果您想比较数据而不是指针,请不要使用c_str()
并直接将const char*
与string
进行比较 - 重载的比较运算符将会做你期望的事。
答案 1 :(得分:3)
operator==
, const char*
不进行字符串比较,它会直接比较指针。 xx
使用的缓冲区与same
指针不同,因此它们不相等。
要与std::string
和const 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
。