c_str()返回值与const char*不匹配
c_str() return value not matching const char*
c_str()返回一个const char*,我假设下面的代码打印"equal",但它没有。
有人能解释一下我错在哪里吗?
string xx = "hello";
const char* same = "hello";
const char* buf = xx.c_str();
if (buf == same)
{
cout << "equal" << endl;
}
我假设以下代码打印"相等"
这是一个错误的假设。std::string
将文字数据复制到其内部缓冲区,因此指针会有所不同。
如果您想比较数据而不是指针,那么根本不要使用c_str()
,而是直接比较const char*
和string
-重载的比较运算符会按照您的期望进行操作。
operator==
对于const char*
不进行字符串比较,而是直接比较指针。xx
使用的缓冲区与same
指针不同,因此它们不相等。
要使用std::string
和const char*
进行字符串比较,只需使用std::string
:提供的运算符
if (xx == same)
{
cout << "equal" << endl;
}
Operator ==
for char*
指针比较指针本身,而不是它们指向的字符串。
如果您想再次猜测std::string,您需要使用比较例程,如以下所示:
if (strncmp(buf, same, xx.size())
...
buf == same
不是比较字符串,而是比较指针的地址。由于它们是两个不同的变量,因此它们将具有两个不相等的不同地址。如果需要比较char*
s或const char*
s,则可以使用std::strcmp
您正在比较两个指针的值,这两个指针永远不会相等。same
指向只读存储器,c_str
返回的指针是std::string
对象的当前数据缓冲区,并保证附加一个null终止符。
可以写入xx == same
:这是因为std::string
用适当的数据类型重载==
。或者,也许不那么优雅,您可以在两个指针上使用std::strcmp
。