ISO C++禁止指针和整数 [-fpermissive] [c++] 之间的比较

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

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

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

if(S[i] == "#")
^~~ 
#include <iostream>
using namespace std;
int main() {
string S = "a#b#";
for( int i=0; i< S.length(); i++){
if(S[i] == "#")
//do somethng
}
return 0;
}

在谷歌搜索此错误时,我找到了解决方法,如if( &S[i] == "#")中使用"&",并且工作正常。有人可以告诉我为什么会这样,这里发生了什么?

您正在迭代字符,但您将字符 (char( 与 (const char *( 进行比较。

您应该将其与字符"#"进行比较。

#include <iostream>
using namespace std;
int main() {
string S = "a#b#";
for( int i=0; i< S.length(); i++){
if(S[i] == '#') // here <--
//do somethng
}
return 0;
}

您可以将其简化为基于范围 for 循环:

#include <iostream>
using namespace std;
int main() {
string S = "a#b#";
for(char character : S){
if(character == '#')
//do somethng
}
return 0;
}

&S[i] == "#" 与 s[i]=='#' 不同,因为前者将指针地址与它的计算结果为 false 进行比较。