C ++不存在从“ std :: string”到“ const char *”的合适转换函数

时间:2019-09-03 16:42:30

标签: c++ string visual-c++ implicit-conversion c-strings

标题中的问题是

当我在密码功能的特定部分执行程序时出错。实际上,这是一个基本的密码功能,在turbo c ++中正常工作,但是在visual c ++中 该错误到来

void user::password()
 {
  char any_key, ch;
  string pass;
  system("CLS");        
  cout << "\n\n\n\n\n\n\n\n\t\t\t\t*****************\n\t\t\t\t*ENTER 
            PASSWORD:*\n\t\t\t\t*****************\n\t\t\t\t";
  start:
  getline(cin,pass);
   if (strcmp(pass, "sha") == 0)           //this is where the error is!*
    {
       cout << "\n\n\t\t\t\t ACCESS GRANTED!!";
       cout << "\n\t\t\t PRESS ANY KEY TO REDIRECT TO HOME PAGE";
       cin >> any_key;
    }
   else
    {
       cout << "\n\t\t\t\t ACCESS DENIED :(,RETRY AGAIN!!\n\t\t\t\t";
       goto start;
    }
  system("CLS");
  }

2 个答案:

答案 0 :(得分:5)

if语句中的表达式

if (strcmp(pass, "sha") == 0) 

不正确。

当您提供了std :: string类型的第一个参数时,该函数需要const char *类型的两个参数,并且没有从std :: string类型到const char *类型的隐式转换。

改为使用

if ( pass == "sha" ) 

在这种情况下,由于构造函数非显式,因此存在从const char *类型(字符串从数组类型隐式转换后的字符串文字的类型)到std :: string类型的对象的隐式转换

basic_string(const charT* s, const Allocator& a = Allocator());

答案 1 :(得分:3)

您还可以将字符串转换为 const char * ,并使用strcmp进行比较。

if (strcmp(pass.c_str(), "sha") == 0)