Den*_*nis 3 c++ pointers raii vector c++11
我有以下代码片段:
size_t size = 5;
std::vector<char> container(size, 'd');
std::copy(container.begin(), container.begin() + size,
std::ostream_iterator<char>(std::cout, " ")); // d d d d d
auto ptr = containter.data();
//ptr == dddddTRASHTRASH why??
char* str_ = new char[size + 1];
memcpy(str_, container.data, size * sizeof(char));
std::cout << str_ << std::endl; // dddddTRASHTRASHTRASH!!!!
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么我的指针不仅包含d.如何创建带有指针5的符号d用RAII?
因为container.data()不是以null结尾,所以指针不指向C风格的字符串.你已经放了5 d秒,但在那些字节之后只是未分配的内存.当你尝试对它进行流式处理时,它将继续运行,直到其中一个未分配的字节恰好是a \0.
为了const char*有效地打印,它必须以a结尾\0.您可以通过以下方式验证:
size_t size = 5;
std::vector<char> container(size, 'd');
container.push_back('\0');
std::cout << container.data();
Run Code Online (Sandbox Code Playgroud)
同样的事情str_.您为null终止符分配了足够的内存,您只需添加它:
char* str_ = new char[size + 1];
memcpy(str_, container.data, size * sizeof(char));
str_[size] = '\0'; // need this
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |