strcmp无法将'std :: string {aka std :: basic_string <char>}'转换为'const char*

6 c++ strcmp

为问题的基本性质提前道歉.

我试图使用该strcmp函数来测试两个匹配字符的字符串.

我将问题简化为以下简单代码:

#include <iostream>
#include <cstring> 

using namespace std;

void compareStrings(string, string);

int main()
{
    string string1 = "testString", string2 = "testString";
    compareStrings(string1, string2);
    return 0;
}

void compareStrings(string stringOne, string stringTwo)
{
    if (strcmp(stringOne,stringTwo) == 0)
        cout << "The strings match." << endl;
    else 
        cout << "The strings don't match." << endl;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释以下编译器错误消息吗?

./newProgram.cpp: In function ‘void compareStrings(std::string, std::string)’:
./newProgram.cpp:17:32: error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘const char*’ for argument ‘1’ to ‘int strcmp(const char*, const char*)’
  if (strcmp(stringOne,stringTwo) == 0)
                                ^
Run Code Online (Sandbox Code Playgroud)

谢谢!XZ.

Jon*_*art 10

strcmp用于C字符串(以null结尾char *). string::compare适用于C++ string.

如果你真的strcmp和你一起使用std::string,你可以string::c_str()用来获取指向底层C字符串的指针:

if (strcmp(stringOne.c_str(), stringTwo.c_str()) == 0)
Run Code Online (Sandbox Code Playgroud)

不过,当然,如果你使用C++,你实际上应该使用 C++和利用std::string==过载.

if (stringOne == stringTwo)
Run Code Online (Sandbox Code Playgroud)