我创建了一个具有文本输入最大尺寸的数组。现在,我想删除剩余的不必要的部分,以释放内存。我不能使用std::string
,我只需要使用char[]
数组。
另外,如果您更了解如何仅使用char并为文本输入分配动态内存,请帮助我。 我不知道用户将输入多少个字符
#include <iostream>
using namespace std;
int main()
{
char *text = new char[256];
cout << "Input text: ";
cin.getline(text,256,'\n');
while (cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max, '\n');
cout << "Input text: ";
cin.getline(text,256,'\n'); //need to delete part after '\n';
}
return 0;
}
答案 0 :(得分:5)
只需使用std :: string而不是C数组的char。它将根据输入长度自动调整大小。
使用免费功能std::getline()
代替istream::getline()
:
string line;
getline(cin, line);
http://en.cppreference.com/w/cpp/string/basic_string/getline
答案 1 :(得分:0)
您可以使用临时动态数组,然后从原始数组中复制所需的部分,然后删除原始数组,然后将原始指针指定给临时指针:
char* szTxt = new char[256];
std::cin.getline(szTxt, 256, '\n');
std::cout << szTxt << std::endl;
const int size = strlen(szTxt);
char* szTmp = new char[size + 1];
strncpy(szTmp, szTxt, size);
szTmp[size] = '\0';
delete[] szTxt;
szTxt = szTmp;
std::cout << szTxt << std::endl;
std::cout << "Size: " << size << std::endl;
delete[] szTxt;