ISO C++ forbids comparison between pointer and integer [-fpermissive]| [c++]

前端 未结 4 1915
感情败类
感情败类 2021-01-11 10:38

I am trying to compile the following code on Ubuntu (64-bit), with Code::Blocks 10.05 as IDE:

#include 
using namespace std;
int main() {
            


        
4条回答
  •  旧巷少年郎
    2021-01-11 11:23

    char a[2] defines an array of char's. a is a pointer to the memory at the beginning of the array and using == won't actually compare the contents of a with 'ab' because they aren't actually the same types, 'ab' is integer type. Also 'ab' should be "ab" otherwise you'll have problems here too. To compare arrays of char you'd want to use strcmp.

    Something that might be illustrative is looking at the typeid of 'ab':

    #include 
    #include 
    using namespace std;
    int main(){
        int some_int =5;
        std::cout << typeid('ab').name() << std::endl;
        std::cout << typeid(some_int).name() << std::endl;
        return 0;
    }
    

    on my system this returns:

    i
    i
    

    showing that 'ab' is actually evaluated as an int.

    If you were to do the same thing with a std::string then you would be dealing with a class and std::string has operator == overloaded and will do a comparison check when called this way.

    If you wish to compare the input with the string "ab" in an idiomatic c++ way I suggest you do it like so:

    #include 
    #include 
    using namespace std;
    int main(){
        string a;
        cout<<"enter ab ";
        cin>>a;
        if(a=="ab"){
             cout<<"correct";
        }
        return 0;
    }
    

提交回复
热议问题