I'm trying to generate a string of 50 dots. I have the following code:
#include <string>
using namespace std;
int main(){
string s(".",50);
cout << s;
}
and the output is:
.vector::_M_realloc_insert$C����pX�%
The string s
doesn't store .
50 times, but some other part of memory. A leak happened, and I have no idea how.
What went wrong? How do I go about generating a string of length n consisting only of dots? In general, I want to do in c what in python would be done by "c"*n.
Thank you.
CodePudding user response:
Your example could be a whole lot shorter, and still have the same problem.
The problem is that with the std::string
constructor you use, the length is the length of the string "."
, not how long the std::string
should be. Since "."
is not 50
characters long, you will have undefined behavior.
From the linked reference for constructor number 4 (the one you use):
The behavior is undefined if
[s, s count)
is not a valid range
There s
is the string "."
and count
is the value 50
.
The constructor I guess you want to use is the one taking a single character instead of a string (number 2 in the linked reference):
std::string s(50, '.'); // Fill string with 50 dots