Преобразование буфера из нескольких C-строк в вектор строк
GetLogicalDriveStrings API Win32 возвращает буфер 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 считает свою работу выполненной, когда он находит нулевой байт. Есть ли способ сделать то, что я хочу сделать?