Win32 API的GetLogicalDriveStrings返回一个C字符串的缓冲区,它看起来像:
"C:\<NULL>D:\<NULL>E:\<NULL><NULL>"
。我想返回一个字符串向量,并考虑使用istream迭代器:
std::vector< std::string > foo()
{
std::unique_ptr<char[]> buffer( new char[1024+1] );
buffer[1024] = '\0';
const auto length = GetLogicalDriveStrings( 1024, buffer.get() );
std::istringstream ss( std::string( buffer.get(), buffer.get()+length ) );
return std::vector< std::string >(
std::istream_iterator<std::string>( ss ),
std::istream_iterator<std::string>()
);
}
但是这总是返回一个大小为1的向量。我想istream_iterator在找到空字节时会认为它的工作已完成。有办法做我想做的事吗?