删除动态数组

时间:2017-11-27 12:49:25

标签: c++

我创建了一个具有文本输入最大尺寸的数组。现在,我想删除剩余的不必要的部分,以释放内存。我不能使用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;
}

2 个答案:

答案 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;