以下错误在做什么?我没有看到边界有任何错误

问题描述 投票:-2回答:1

该代码具有标题,实现和主文件。应该增加字符串中所有字符的ASCII值,然后返回与该ASCII值关联的字符值。

有问题的代码如下:

    for(int i = 0; i < sizeof(letters); i++)
    {
        if ((int)letters.at(i) >= (int)'a' && (int)letters.at(i) <= (int)'z')
        {
            letters.at(i) = (((letters.at(i) - 'a') + 1) % 26 + 'a');
        }

        else if ((int)letters.at(i) >= (int)'A' && (int)letters.at(i) <= (int)'Z')
        {
            letters.at(i) = (((letters.at(i) - 'a') + 1) % 26 + 'A');
        }
    }

HomeworkNine.exe中0x750A3DB2的未处理异常:Microsoft C ++异常:内存位置0x00EFF7E8的std :: out_of_range。发生

我不知道边界在哪里,因为我认为模数会解决这个问题。

c++ unhandled-exception
1个回答
4
投票

[sizeof(letters)仅在letterschar的纯数组时才是正确的,而不能,因为纯数组不具有at成员函数。

您需要将其替换为letters.size()

不需要那些强制转换为int的对象,因为编译器会为您执行这些操作(如果您的平台上未签名unsigned,则为char)。内置算术运算符仅适用于int或更大的类型,请参见Integral promotion

© www.soinside.com 2019 - 2024. All rights reserved.