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

时间:2010-11-24 23:20:17

标签: c++

我有一个char *变量:

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

如何将其转换为std :: vector?施法将给我一个错误。

3 个答案:

答案 0 :(得分:61)

std::vector<char> data(buffer, buffer + size);

James McNellis如果你能做到这一点,答案会更好。

答案 1 :(得分:22)

为什么不使用std::vector开头:

std::vector<char> buffer(lSize);
std::fread(&buffer[0], 1, buffer.size(), pFile);

答案 2 :(得分:4)

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

假设你想构建一个chars向量,你可以创建一个类型为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);