在这里发生什么事情你不能比较C++中的(mychar1 =='ä'|| mychar2 =='Ä')吗?

Chr*_*_45 0 c++ visual-studio-2008

我试图比较这两个字符,但在赢得32 Visual Studio 2008:

if(mychar1 ==  'ä'  || mychar2 == 'Ä')
Run Code Online (Sandbox Code Playgroud)

Erromess:

调试断言失败!

文件:f\dd\vctools\crt_bld\self_x86\crt\src\xstring第1575行

表达式:字符串下标超出范围

sbi*_*sbi 6

适用于我的机器:

#include <iostream>

int main()
{
    char mychar1, mychar2;
    std::cin >> mychar1 >> mychar2;
    if(!std::cin)
        return 2;
    if(mychar1 ==  'ä' || mychar2 == 'Ä' )
       return 1;
    std::cout << "No!\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,您引用的错误("字符串下标超出范围")意味着您尝试在无效索引处访问字符串中的字符.像my_str.at(10)(或者,在Debug构建中my_str[10]),my_str只有10个字符的东西.由于您显示的代码不能访问字符串中的字符,因此错误出现在您未显示的代码中.

编辑:您在问题评论中显示的代码确实使用字符串访问字符串operator[]().当你这样做时string2[0],你检查过该字符串是否为空?

  • 确保您的文件(.cpp)保存为ASCII或iso-8859-15/iso-latin9,而不是UTF-8或其他类似文件. (3认同)