C++ STL矢量数据提取

C++ STL矢量数据提取,c++,vector,stl,C++,Vector,Stl,我有一个std::vector,大小约为1500。但是,当我尝试使用vector::data将数据提取到字符串时,它不起作用 std::vector<char> testVector; //insert data to test vector std::string temp = testVector.data(); 当我在这之后打印temp时,它只打印数据。当我将vector中的数据大小减少到100-200时,它可以正常工作,正如预期的那样。但当尺寸增大时,它就会停止工作。我试过

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

std::vector<char> testVector;
//insert data to test vector
std::string temp = testVector.data();
当我在这之后打印temp时,它只打印数据。当我将vector中的数据大小减少到100-200时,它可以正常工作,正如预期的那样。但当尺寸增大时,它就会停止工作。我试过使用string::reserve,但仍然没有

我错过了什么?

试试:

std::vector<char> testVector;
//insert data to test vector
testVector.push_back('\0');
std::string temp = testVector.data();
您的问题可能发生在这样一个事实上,即您正在构造temp的c字符串不是以null结尾的。C字符串必须以null结尾,以便对结束有一些概念。您可以在此处了解更多信息:

试试:

std::vector<char> testVector;
//insert data to test vector
testVector.push_back('\0');
std::string temp = testVector.data();
您的问题可能发生在这样一个事实上,即您正在构造temp的c字符串不是以null结尾的。C字符串必须以null结尾,以便对结束有一些概念。您可以在此处了解更多信息:

将字符*分配给字符串需要以null结尾的字符串

要将以非null结尾的向量复制到字符串中,请使用:

或者,这更为惯用,因为它可以用于任何容器:

std::string temp(testVector.begin(), testVector.end());
将char*分配给字符串需要以null结尾的字符串

要将以非null结尾的向量复制到字符串中,请使用:

或者,这更为惯用,因为它可以用于任何容器:

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

您的向量必须为空终止向量是否在任何位置包含\0?它应至少包含一个。向量必须为空终止向量是否在任何位置包含\0?它应该至少包含一个。看起来您通常应该更喜欢这种形式,因为当预先知道大小时,字符串操作通常要快得多。如果您确实知道向量中的字符串有NUL终止符,但不希望结果字符串中有NUL终止符,则始终可以适当调整传递给字符串构造函数的大小。另一个与容器无关的选项是std::string telletestvector.begin,测试向量。end@DaveS:在你发表评论之前的10秒钟内编辑:看起来你通常应该更喜欢这种形式,因为当预先知道大小时,字符串操作通常要快得多。如果您确实知道向量中的字符串有NUL终止符,但不希望结果字符串中有NUL终止符,则始终可以适当调整传递给字符串构造函数的大小。另一个与容器无关的选项是std::string telletestvector.begin,testVector。end@DaveS:在您发表评论前10秒内编辑: