String存储来自不相关内存地址的数据



我正在尝试生成一个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

构造函数Iguess你想要使用的是接受单个字符而不是字符串(链接参考中的数字2):
std::string s(50, '.');  // Fill string with 50 dots

最新更新