STL矢量数据提取

时间:2013-11-27 14:21:51

标签: c++ vector stl

我的std::vector<char>大小约为1500。但是,当我尝试使用vector::data将数据提取到字符串时,它不起作用。

std::vector<char> testVector;
//insert data to test vector
std::string temp = testVector.data();

在此之后我打印temp时,它只会打印DATA。当我将datavector的大小减小到100-200时,它会正常工作并且符合预期。但是当尺寸增加时,它就会停止工作。我尝试使用string::reserve,但仍然没有。

我错过了什么?

2 个答案:

答案 0 :(得分:7)

为字符串分配char*需要以空字符结尾的字符串。

要将(非空终止的)vector<char>复制到string,请使用:

std::string temp(testVector.data(), testVector.size());

或(这更加惯用,因为它可以与任何容器一起使用):

std::string temp(testVector.begin(), testVector.end());

答案 1 :(得分:0)

尝试:

std::vector<char> testVector;
//insert data to test vector
testVector.push_back('\0');
std::string temp = testVector.data();

您的问题很可能发生在这样一个事实上:您构造temp的c字符串不是以null结尾的。 C字符串必须以空值终止,以便有一些关于结尾的概念。您可以在此处详细了解:http://en.wikipedia.org/wiki/Null-terminated_string