strcmp не может преобразовать ‘std::string {aka std::basic_string‹char›}’ в ‘const char*

Заранее извиняюсь за элементарность вопроса.

Я пытаюсь использовать функцию 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;
}

Может ли кто-нибудь объяснить следующее сообщение об ошибке компилятора?

./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)
                                ^

Спасибо! Хз.


person Community    schedule 24.05.2014    source источник
comment
Почему вы используете strcmp со строками C++?   -  person Oliver Charlesworth    schedule 24.05.2014


Ответы (1)


strcmp для строк C (заканчивается нулем char *). string::compare для С++ strings.

Если вы действительно хотите использовать strcmp с std::string, вы можете использовать string::c_str() чтобы получить указатель на базовую C-строку:

if (strcmp(stringOne.c_str(), stringTwo.c_str()) == 0)

Но, конечно, если вы используете C++, вам следует использовать C++ и использовать перегрузка == std::string.

if (stringOne == stringTwo)
person Jonathon Reinhart    schedule 24.05.2014