Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除动态数组的一部分_C++ - Fatal编程技术网

C++ 删除动态数组的一部分

C++ 删除动态数组的一部分,c++,C++,我为文本输入创建了一个最大维度的数组。现在,我想删除剩余的不必要部分以释放内存。我不允许使用std::string,我只需要使用char[]数组 另外,若你们知道如何更好地只使用字符和为文本输入分配动态内存,请帮助我。 我不知道用户将输入多少个字符 #include <iostream> using namespace std; int main() { char *text = new char[256]; cout << "Input text:

我为文本输入创建了一个最大维度的数组。现在,我想删除剩余的不必要部分以释放内存。我不允许使用
std::string
,我只需要使用
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;
}
#包括
使用名称空间std;
int main()
{
字符*文本=新字符[256];

cout只需使用std::string而不是char的C数组。它将根据输入长度自动调整大小

使用自由函数
std::getline()
而不是
istream::getline()


只需使用std::string而不是char的C数组。它将根据输入长度自动调整大小

使用自由函数
std::getline()
而不是
istream::getline()


您可以使用临时动态数组,然后从原始数组复制所需的零件,然后删除原始数组,然后将原始指针指定给临时指针:

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;
char*szTxt=新字符[256];
标准::cin.getline(szTxt,256,“\n”);

std::cout您可以使用临时动态数组,然后从原始数组复制所需的部分,然后删除原始数组,然后将原始指针指定给临时指针:

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;
char*szTxt=新字符[256];
标准::cin.getline(szTxt,256,“\n”);


STD:叶,我知道。但是在我的作业中,我只能使用char。字符串类型是不允许的。如果你写了一个问题并加上了C++,你就必须期望使用C++字符串的人回答它。你从来没有说过不允许的。我将把这个答案留在这里,因为它把这个问题写下来。纠正。对不起,这是我的第一个主题。叶,我KNO。但是我在作业中只能使用char。字符串类型不允许。如果你写了一个问题并加上C++,你就必须期望使用C++字符串的人回答它。你从来没有说过不允许的。我将把这个答案留在这里,因为它把问题作为书面方式来解决。对不起,这是我的第一个话题。为什么你改变了标签T?o代码> C <代码>?你不能这样做——你需要复制到另一个更小的数组。你认为你需要删除什么,或者为什么,想知道,因为我只需要胡尔。不允许使用字符串类型。使用一个临时的动态数组。@ DeNealYyJuk将它标记为C++是正确的,因为这就是它。但是,你应该发布人工作业要求是问题的一部分。等等,我会编辑它。你为什么要将标记更改为
C
?你不能这样做-你需要复制到另一个更小的数组。你认为你需要删除什么或者为什么。因为我只需要使用char.String类型。不允许使用临时动态数组。@ DenAndreychuk,把它标记为C++是正确的,因为这就是它。但是,你应该把人工作业的要求作为问题的一部分。请继续,我会编辑它。你的代码将在<代码> SZTMP [ 5 ]中失败。='\0'
。在
new
语句处将大小增加1。@iBug:Thanx!我没有注意到。已编辑。您的代码将在
szTmp[5]='\0'
处失败。在
new
语句处将大小增加1。@iBug:Thanx!我没有注意到。已编辑。