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

C++循环补0使字符串长度为16的倍数时报std::length_error如何解决

问题原因分析
  • 补位计算逻辑错误:你的需求是将字符串补0到长度可被16整除,无需判断长度奇偶,直接计算需要补的0的个数即可。当字符串长度大于15时,你代码中15 - usrinp.length()会得到负数,string::append接收负数字符数参数时就会抛出你遇到的std::length_error异常。
  • 多余的循环逻辑:补位操作一次即可完成,你写的for循环会动态修改字符串长度,可能导致循环逻辑混乱,完全没有存在必要。
  • 头文件引用错误:使用std::string需要引用<string>头文件,你引用的<string.h>是C语言字符串处理函数的头文件,和std::string无关。
修正后代码
#include <iostream>
#include <string>

using namespace std;

int check(string usrinp) {
    // 计算需要补的0的个数,如果已经是16的倍数则补0个
    int pad_len = (16 - usrinp.length() % 16) % 16;
    if (pad_len > 0) {
        usrinp.append(pad_len, '0');
    }
    cout << usrinp << endl;
    return 0;
}

int main(){
    check("1"); 
    return 0;
}
验证说明

输入字符串长度为1时,计算得pad_len = (16 - 1%16) %16 = 15,补15个0后总长度16,符合要求;如果输入长度本身就是16的倍数,pad_len为0,不会进行额外填充,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:54:02