如何修复"来自' char *'的无效转换to' char'"错误?

时间:2015-07-03 08:58:18

标签: c++

我在编译此源时遇到问题。 这是我的来源:

 #include <iostream>
#include <string>

using namespace std;
char pass[7],d;
int v;

int isvalid(char pass);

int main(int argc, char** argv) {
    cout<<"Enter Password :";
    gets(pass);
    cout<<endl;
    v=isvalid (pass);
    if(v==1){
        cout<<"The Password is Correct . You can Come in"<<endl;
    }
    else{
        cout<<"The Password in InCorrect ! You Can't Come In"<<endl;
    }
    system("PAUSE");
    return 0;
}
/*-----------Functions--------------*/
int isvalid(char pass){
    d="Pokerface";
    if(pass==d){
        return 1;
    }
    else{
        return 0;
    }
}

应该从用户那里获取密码并使用isvalid函数检查它并说它是否正确但是编译器(DEV C ++ 5)向我显示了这些错误:

    In function 'int main(int, char**)':
14  17      [Error] invalid conversion from 'char*' to 'char' [-fpermissive]
8   5       [Note] initializing argument 1 of 'int isvalid(char)'
    In function 'int isvalid(char)':
26  3   [Error] invalid conversion from 'const char*' to 'char' [-fpermissive]
28      recipe for target 'main.o' failed

有什么问题?请帮帮我。

3 个答案:

答案 0 :(得分:2)

由于您已将C ++标记为此问题,我建议您使用std::string

#include <iostream>
#include <string>
using namespace std;

bool isvalid(const std::string & pass);

int main(int argc, char ** argv) {
    string pass;
    cout << "Enter Password" << endl;
    cin >> pass;
    if (isvalid(pass))
        cout << "The Password is Correct. You can Come in" << endl;
    else
        cout << "The Password in InCorrect ! You Can't Come In" << endl;
    return 0;
}

bool isvalid(const std::string & pass) {
    return pass == "Pokerface";
}

答案 1 :(得分:1)

pass是一个char(char *)数组,您的isvalid函数将char作为第一个参数。我怀疑你想要改变你的isvalid函数,以便它需要char*作为参数,如下所示:

int isvalid(char* pass){

另外,请记住:执行此操作时:

if (pass==d)

你不是在比较字符串,而是指针。如果你想检查两个字符串是否相同,那就不行了

对于字符串比较,请使用strcmp(str1, str2)中的string.h

答案 2 :(得分:0)

int isvalid(char pass)

你可能想在那里接受char*,但你不应该这样做:改为使用std::string。此外,您的函数应返回bool而不是int

bool isvalid(const std::string& pass)

然后,您应该将passd更新为std::string并使用std::cin代替gets来阅读stdinpassd没有理由成为全局变量,因此请将它们作为函数的本地变量。

如果你保持你的功能为char*你的比较将无效,因为你只是比较指针。你需要strncmp