C++生成指定长度重复字符字符串出错,求问题排查与实现方案
C++生成重复字符字符串的问题分析与解决
问题根源
你使用的string s(".",50);调用了错误的std::string构造函数:
这个版本的构造函数签名是basic_string(const CharT* s, size_t n),它会从传入的C风格字符串s中复制前n个字符。但你传入的".\0"是长度仅为1的有效字符串(只有'.'是有效字符,后面的'\0'是终止符),复制50个字符必然会读取超出字符串范围的未知内存,导致输出乱码,属于内存越界访问。
正确实现方式(对应Python的"c"*n)
方法一:直接使用指定重复次数的构造函数
这是最简洁高效的方式,使用std::string(size_t count, CharT ch)构造函数,第一个参数是重复次数,第二个是要重复的字符:
#include <iostream> #include <string> using namespace std; int main(){ string s(50, '.'); cout << s << endl; }
方法二:动态追加字符
如果需要在已有字符串基础上扩展,可以用append方法:
string s; s.append(50, '.'); // 追加50个'.'
方法三:循环填充(不推荐,效率较低)
仅作参考,不建议用于大数量的重复:
string s; for (int i = 0; i < 50; ++i) { s += '.'; }
内容的提问来源于stack exchange,提问作者subjectsphinx
相关产品推荐
相关产品推荐

