8

嗨,任何人都可以告诉这个代码有什么问题吗?

 string s=getString(); //return string

    if(!strcmp(s,"STRING")){
         //Do something
    }

编译时出现错误

error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int strcmp(const char*, const char*)’|
4

5 回答 5

27

strcmp接受const char*作为参数。您可以使用c_str方法:

if(!strcmp(s.c_str(),"STRING"))

或者只是使用重载operator==for std::string

if(s == "STRING")
于 2013-05-29T09:42:19.693 回答
11

您需要使用s.c_str()以下方式获取 a 的 C 字符串版本std::string

if (!strcmp (s.c_str(), "STRING")) ...

但我不确定你为什么不直接使用:

if (s == "STRING") ...

这更具可读性。

于 2013-05-29T09:42:38.193 回答
5

您可以在其他答案中使用该c_str()方法。std::string

你也可以这样做:

if (s == "STRING") { ... }

哪个更清楚,并且不会假装您正在编写 C。

于 2013-05-29T09:43:54.520 回答
1

如果要保持 C 比较字符串的方式,则必须使用它的c_str()成员函数std::string为您提供底层数组。char

否则,您应该使用operator==which 可以测试字符串和const char*.

于 2013-05-29T09:42:40.093 回答
1

您必须使用 c_str() 它应该可以解决您的问题。

于 2013-05-29T09:45:03.300 回答