You need to enable JavaScript to run this app. C++实现随机句子生成的string函数拼接触发std::length_error报错排查
优惠活动
大模型
产品
解决方案
定价
更多

C++实现随机句子生成的string函数拼接触发std::length_error报错排查

报错含义说明

std::length_error是C++标准库字符串类抛出的长度非法异常,你遇到的basic_string::_S_create报错,本质是程序试图使用无效内存创建/拼接字符串对象,触发的未定义行为。

报错产生原因
  • 你定义返回值类型为string的subject()、sentence()两个函数,内部完全没有return语句,执行完函数逻辑后会返回随机的无效内存地址,后续拼接字符串时访问这块非法内存,直接触发长度错误异常。
  • 你在每个取值函数里都调用一次srand(time(NULL)),time()的精度为秒级,短时间内多次调用会得到完全相同的随机种子,导致随机数固定,无法实现随机选取片段的效果。
  • 编写的isTerminal()函数未被任何逻辑调用,属于冗余代码,不影响报错但可以删除简化程序。
修正方案
  • 给subject()函数补上返回值逻辑,移除内部的打印语句,把随机选中的主语字符串返回
  • 给sentence()函数调整返回值类型为void,因为它仅负责打印拼接好的句子,不需要返回值,避免无返回值的未定义行为
  • 将随机种子播种逻辑srand(time(NULL))移到main()函数开头,仅执行一次,保证随机数生效
  • 删除未使用的isTerminal()函数
修正后可运行代码
#include<iostream>
#include<string>
#include<cstdlib>
#include<ctime>
using namespace std;

string subject()
{
    string subjects[3] = {"This ", "Computers ", "I "};
    int i = rand() % 3;
    return subjects[i];
}

string verb()
{
    string verbs[4] = {"is ","run ","am ","tell "};
    int i = rand() % 4;
    return verbs[i];
}

string noun(){
    string nouns[4] = {"university ","world ","cheese ","lie "};
    int i = rand() % 4;
    return nouns[i];
}

void sentence(){
    string combine_sentence = subject() + verb() + noun();
    cout << combine_sentence << endl;
}

int main()
{
    srand(time(NULL)); // 仅初始化一次随机种子,避免重复播种失效
    sentence();
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 08:36:05