首页 > 解决方案 > 如何使用的功能像 strcmp() 的对象在 C++ 中

问题描述

我还注意到 <strings.h> 的函数不适用于 <string.h> 的对象

例如在开发 C++

#include<string>
#include<strings.h>
using namespace std;
int main()
{
string a="admin";
string b;
cin>>b;
if(strcmp(a,b)==0)
{
cout<<"Equal";
}
}

因此编译器在调用 strcmp() 函数的行显示错误。

[Error] cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'int strcmp(const char*, const char*)'

这个错误实际上意味着什么以及如何解决这个问题以制作登录菜单。

请帮我解决这个问题

我也知道使用 c 类型字符串的替代方法如下,它工作正常

   #include<strings.h>
    using namespace std;
    int main()
    {
    char user[32]="admin",u[32]="";
    char password[32]="admin",p[32]="";
    cout<<"\nLOGIN>>\n\nEnter User Name:";
    cin.getline(u,32);
    cout<<"Enter Password:";
    cin.getline(p,32);
    if(strcmp(u,user)==0 && strcmp(p,password)==0)
    {
cout<<"Match";
}
}

但我想比较 <string.h> 的对象,而不是数组。

标签: c++stringauthenticationcopycompare

解决方案


strcmp作用于 c-strings,而不是 std::strings。

要访问 std::string 的内部 c 字符串,请使用c_str() 方法

IE

if (strcmp(a.c_str(), b.c_str()) == 0) {
 // ...
}

但是你也可以直接做比较

if (a == b) {
  // ...
}

推荐阅读