You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++字母求和程序出现Segmentation Fault(段错误)问题求助

段错误原因及修复方案

错误原因

  1. 未初始化变量n:你定义了int n;但没给初始值,局部变量默认是随机的垃圾值。直接用text[n]访问字符串时,这个随机的n大概率超出了字符串的有效索引范围,程序就会触发段错误(访问了不该碰的内存区域)。
  2. 循环逻辑错误:就算n初始化了,你的循环是先n++再取text[n],会跳过第一个字符;而且用text[n] != '\0'判断结束,C的std::string虽然内部带终止符,但用size()方法判断长度更安全,也符合C的用法习惯。

修复后的代码

#include <iostream>
using namespace std;

int letter_sum(string text)
{
    int Psum = 0;
    int n = 0; // 初始化n为0,从第一个字符开始遍历
    // 用text.size()判断循环边界,彻底避免越界访问
    while (n < text.size())
    {
        // 直接计算每个小写字母对应的数值(a=1, b=2...)
        Psum += text[n] - 'a' + 1;
        n++;
    }
    return Psum;
}

int main ()
{
    string text;
    cout << "type the text: ";
    cin >> text;
    int displayvalue = letter_sum(text);
    cout << displayvalue << endl;
}

额外说明

  • 用text[n] - 'a' +1代替原来的Psum - 96*n,逻辑更直观:小写字母'a'的ASCII码是97,text[n]-'a'得到0(对应a)、1(对应b)……加1后就是1、2……的目标数值,和你原来的计算结果完全一致,但可读性更强。
  • 如果需要支持大写字母,可以加个转换逻辑:tolower(text[n]) - 'a' +1,记得在代码开头包含<cctype>头文件。

内容的提问来源于stack exchange,提问作者Zenz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 12:52:36