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

0 ответов

Другие вопросы по тегам