Mik*_*Mik 14 c++ winapi stl stdstring
有没有办法获得"原始"缓冲区oa std :: string?
我在想类似的东西CString::GetBuffer().例如,使用CString我会这样做:
CString myPath;
::GetCurrentDirectory(MAX_PATH+1, myPath.GetBuffer(MAX_PATH));
myPath.ReleaseBuffer();
Run Code Online (Sandbox Code Playgroud)
那么,std :: string有类似的东西吗?
Xeo*_*Xeo 17
std::vector<char>如果需要真正的缓冲区,请使用.
#include <vector>
#include <string>
int main(){
std::vector<char> buff(MAX_PATH+1);
::GetCurrentDirectory(MAX_PATH+1, &buff[0]);
std::string path(buff.begin(), buff.end());
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*ren 17
虽然有点非正统,但std::string用作线性内存缓冲区是完全有效的,唯一需要注意的是,在C++ 11之前,标准不支持它.
std::string s;
char* s_ptr = &s[0]; // get at the buffer
Run Code Online (Sandbox Code Playgroud)
引用Herb Sutter,
我知道的每个std :: string实现实际上都是连续的并且null终止它的缓冲区.所以,虽然它没有得到正式的保证,但实际上你可以通过调用&str [0]来获取指向连续和以null结尾的字符串的指针.(但为了安全起见,你仍然应该使用str.c_str().)
可能是关键在这里.因此,虽然它不是一个保证,但您应该能够依赖于std::string线性内存缓冲区的原则,并且您应该在测试套件中断言关于此的事实,只是为了确定.
你可以随时建立自己的缓冲类,但是当你想购买时,这就是STL提供的.
| 归档时间: |
|
| 查看次数: |
19386 次 |
| 最近记录: |