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
相关产品推荐
相关产品推荐

