ISO C++禁止指针和整数之间的比较 [-允许]|[C++]

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

本文关键字:C++ 允许 比较 之间 指针 禁止 整数 ISO      更新时间:2023-10-16

我正在尝试在Ubuntu(64位(上编译以下代码,代码::Blocks 10.05作为IDE:

#include <iostream>
using namespace std;
int main() {
    char a[2];
    cout << "enter ab ";
    cin >> a;
    if (a == 'ab') // line 7
    {
         cout << "correct";
    }
    return 0;
}

在第 7 行,我的编译器给了我错误"ISO C++禁止指针和整数 [-fpermissive] 之间的比较"。

为什么这不起作用? 我知道我可以使用std::string来解决问题,但我想了解当前的问题。

char a[2]定义了char的数组。 a 是指向数组开头内存的指针,使用 == 实际上不会将 a 的内容与 'ab' 进行比较,因为它们实际上不是相同的类型,'ab'是整数类型。另外'ab'应该"ab"否则你也会在这里遇到问题。要比较字符数组,您需要使用 strcmp。

可能说明的事情是查看'ab' typeid

#include <iostream>
#include <typeinfo>
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;
}

在我的系统上,这将返回:

i
i

表明'ab'实际上被评估为 int。

如果你要对 std::string 做同样的事情,那么你将处理一个类,并且 std::string operator ==重载,并以这种方式调用时将进行比较检查。

如果您希望以惯用的c ++方式将输入与字符串"ab"进行比较,我建议您这样做:

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

这是由于:

if(a=='ab') ,在这里,aconst char*类型(即:字符数组(

'ab'是一个常量值,它不计算为字符串(因为单引号(,但将计算为整数。

由于 char 是从 C 继承的基元类型,因此未定义运算符==

好的代码应该是:

if(strcmp(a,"ab")==0),您将使用 strcmp 将一个const char*与另一个const char*进行比较。

在 DEVC++ 中,我遇到了同样的问题,我得到了解决方案。我使用单引号而不是双引号。

在你的代码中,你写了 char a[2]; 这是错误的。你写了字符* a[2];然后,您可以获得正确的输出。