代码之家  ›  专栏  ›  技术社区  ›  Richard Knop

如何将char*转换为std::vector?

c++
  •  21
  • Richard Knop  · 技术社区  · 15 年前

    我有一个char*变量:

    // char* buffer;
    // ...
    fread (buffer, 1, lSize, pFile);
    // ...
    

    如何将其转换为std::vector?选角会让我出错的。

    3 回复  |  直到 15 年前
        1
  •  22
  •   James McNellis    15 年前

    为什么不使用 std::vector 首先:

    std::vector<char> buffer(lSize);
    std::fread(&buffer[0], 1, buffer.size(), pFile);
    
        2
  •  70
  •   ronag    15 年前
    std::vector<char> data(buffer, buffer + size);
    

    如果你能那样做,詹姆斯·麦克内利斯的回答会更好。

        3
  •  4
  •   mgiuca    15 年前

    不能在char*和vector之间进行转换;指针转换会导致结果与输入具有完全相同的字节,因此除非进行低级位操作,否则这通常是一个坏主意。

    假设您想要构建一个字符向量,那么可以创建一个类型为 std::vector<char> (注意,您需要提供向量元素的类型),并通过将开始和结束指针传递给构造函数从数组初始化它:

    std::vector<char> vec(buffer, buffer+lSize);
    

    请注意,第二个参数是一个“结束指针”,在C++中非常常见。重要的是,它是一个指向角色的指针 之后 缓冲区的结尾,而不是缓冲区中的最后一个字符。换句话说,开始是包容的,而结束是排斥的。

    另一种可能性(因为你在处理字符)是使用 std::string 相反。这可能是您想要的(取决于您是将char*看作字符串还是字节数组)。您可以用同样的方法构造它:

    std::string str(buffer, buffer+lSize);
    

    或者使用不同的构造函数,将大小作为第二个参数:

    std::string str(buffer, lSize);