我想知道两个代码之间的区别是什么。当我使用.c_str()时,它不起作用

std::vector<std::pair<std::string, std::string> >::iterator it

for(;it!=MySet.end();++it)
{
        if(std::get<1>(*it).c_str()=="PAUSE")  //Why it works only with std::get<1>(*it) and not with std::get<1>(*it).c_str()
        {
            TempDefaultVan = std::get<0>(*it).c_str();
        }
}

最佳答案

std::get<1>(*it)返回类型为std :: string的对象。此类具有重载operator ==,以将std :: string类型的对象与字符数组进行比较。

std::get<1>(*it).c_str()返回一个字符数组。数组没有比较运算符。要比较字符数组,您应该使用标准的C函数std::strcmp

所以你可以写

if( std::strcmp( std::get<1>(*it).c_str(), "PAUSE" ) == 0 )


如果您将简单地写为

if(std::get<1>(*it).c_str()=="PAUSE")


那么编译器将比较两个指针,因为它将数组转换为指向此类表达式中第一个元素的指针。结果,如果数组占用不同的内存区域,则此表达式将始终等于false。

关于c++ - 比较字符串.c_str()和普通字符串的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21889202/

10-16 04:29
查看更多