我的std::vector<char>
大小约为1500
。但是,当我尝试使用vector::data
将数据提取到字符串时,它不起作用。
std::vector<char> testVector;
//insert data to test vector
std::string temp = testVector.data();
在此之后我打印temp
时,它只会打印DATA
。当我将data
中vector
的大小减小到100-200时,它会正常工作并且符合预期。但是当尺寸增加时,它就会停止工作。我尝试使用string::reserve
,但仍然没有。
我错过了什么?
答案 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