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

C++中string::resize函数填充乱码,无法添加指定字符串问题求助

问题分析与解决

核心问题

你完全误解了std::string::resize的第二个参数用法:

  • 这个参数要求是单个char类型字符,不是字符串,也不是数字。
  • 你传入unsigned long long类型的aa,会被强制转换为char——aa的数值对应的ASCII字符就是你看到的乱码õ,这就是乱码的来源。
  • 直接传字符串给第二个参数必然报错,因为参数类型不匹配。

正确实现思路

要在outputn末尾重复添加aa的字符串形式,直到总长度达到80,需要先把aa转为字符串,再通过追加操作填充,最后截断到目标长度。

修正后的代码示例

int nine(999999);
unsigned long long aa;
unsigned long long keyn;
string outputn;

// 先转换nine类型避免溢出,再计算aa
aa = static_cast<unsigned long long>(nine) * keyn;
// 把aa转为字符串
string aa_str = std::to_string(aa);

// 循环追加直到长度接近80
while (outputn.size() < 80) {
    outputn += aa_str;
}
// 截断到正好80长度
outputn.resize(80);

std::cout << outputn;

额外注意点

  • 类型溢出:nine是int类型(值999999),如果keyn较大,直接相乘可能超出int的范围,所以先把nine转成unsigned long long再计算更安全。
  • 简洁写法:也可以通过计算重复次数一次性追加,再截断:
    int target_len = 80;
    string aa_str = std::to_string(aa);
    // 计算需要重复的次数(向上取整)
    int repeat_times = (target_len + aa_str.size() - 1) / aa_str.size();
    outputn.append(repeat_times, aa_str);
    outputn.resize(target_len);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:17:40