我正在尝试生成一个50个点的字符串。我有以下代码:
#include <string>
using namespace std;
int main(){
string s(".",50);
cout << s;
}
,输出为:
.vector::_M_realloc_insert$C����pX�%
字符串s
不存储.
50次,而是存储其他内存部分。发生了泄漏,我不知道怎么回事。
出什么事了?如何生成一个长度为n的只由点组成的字符串?一般来说,我想在c++中完成"c"*n.
在python中可以完成的工作谢谢。
您的示例可以短得多,但仍然存在相同的问题。
问题在于您使用的std::string
构造函数,长度是字符串"."
的长度,而不是std::string
应该是多长。由于"."
不是50
字符长,您将有未定义行为。
从构造函数4的链接引用(您使用的那个):
如果
行为是未定义的[s, s + count)
不是有效范围
其中s
为字符串"."
,count
为值50
。
std::string s(50, '.'); // Fill string with 50 dots