将多个C字符串的缓冲区转换为字符串向量

时间:2014-11-05 13:18:32

标签: c++ istream c++-standard-library istream-iterator

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在找到空字节时会认为它的工作已完成。有办法做我想做的事吗?

0 个答案:

没有答案