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)
| 归档时间: |
|
| 查看次数: |
2523 次 |
| 最近记录: |