Stringstream to Vector <char>抛出std :: bad_alloc

Sub*_* S. 0 c++ vector stringstream

我稍微修改了Boost Property Tree,我遇到了这个例子.我需要将最终结果转换为vector,所以我之后又添加了一行

write_json(ss, root);
Run Code Online (Sandbox Code Playgroud)

像这样:

std::vector<char> testVec(std::begin(ss.str()), std::end(ss.str()));
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

std::string someString = ss.str()
char* someArray = (char*)someString.c_str();
std::vector<char> someVec(someArray, someArray+sizeof(someArray));
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都收到此错误:

terminate called after throwing an instance of 'std::bad_alloc'
what():  std::bad_alloc
Run Code Online (Sandbox Code Playgroud)

什么提示我做错了什么?我收集的不是属性树的问题.这是字符串到矢量转换的问题.我想这是有道理的,因为向量只应该是一维的,但我不知道如何将该字符串转换为向量并再次将其返回.

hmj*_*mjd 12

这失败了:

std::vector<char> testVec(std::begin(ss.str()), std::end(ss.str())); 
Run Code Online (Sandbox Code Playgroud)

因为std::begin()std::end()不与同一个std::string实例相关联.在ss.str()返回一个新的std::string每次例如,它没有返回std::string&到某些内部成员.

这是不正确的:

std::vector<char> someVec(someArray, someArray+sizeof(someArray)); 
Run Code Online (Sandbox Code Playgroud)

因为sizeof(someArray)sizeof(char*).如果少于sizeof(char*)元素,someArray则尝试读取不应该的内存.

可能的解决方案:

std::string someString = ss.str();
std::vector<char> someVec(someString.begin(), someString.end());
Run Code Online (Sandbox Code Playgroud)