*将char数组转换为字符串(两次运行代码和两个不同的结果)

时间:2019-05-22 13:33:21

标签: c++ arrays string char

为什么相同的代码有两个不同的结果,但并非总是交替的,而是有时由* array构成的字符串的长度为4,而不同的时间为长度6。最后2个字符是随机的。

string linequery;

getline(cin, linequery);

char  * buffer =  new char [4];

size_t lengthh = linequery.copy(buffer, 4, 0);
string stringbuffer(buffer);

cout << " length :" << stringbuffer.length() << endl;
cout << " string buffer : " << stringbuffer << endl;

referencetree.push_back(stringbuffer);

delete []  buffer;

长度为6的输出:

长度:6

字符串缓冲区:tag1

行查询:tag1.tag2〜name:length:14


长度为4的输出:

长度:4

字符串缓冲区:tag1

行查询:tag1.tag2〜name:长度:14


INPUT相同:tag1.tag2〜name

1 个答案:

答案 0 :(得分:1)

很可能linequery.copy不会写一个终止的null,因此您依赖buffer之后的下一个字符为NULL,这是不能保证的。您应该使用以下命令构建字符串:

string stringbuffer(buffer, dotpoint-lastdot);