C++ delete问题,望高手帮忙解决

来源:百度知道 编辑:UC知道 时间:2024/06/24 12:57:29
#include<iostream>
#include<string>
using namespace std;
#define MaxNum 20
void main()
{
char *array=new char[MaxNum];
int num=0;
cout<<"输入一个字符串,长度最大为20个字节:";
cin>>array;
int len=strlen(array);
if(len>20)
{
cout<<"字符串太长!";
exit(0);
}
else
{
cout<<"请输入要将上述字符串右移的位数:";
cin>>num;
char *movedArray=new char[len];//将右移后的字符存储在该数组中
for(int i=0;i<len;i++)
{
movedArray[(i+num)%(len)]=array[i];

}
movedArray[len]='\0';
cout<<movedArray<<endl;
delete[] movedArray;
movedArray=0;

}

delete[] array;
array=0;

}
可以等到结果,但是总是会弹出一个提示出错框,去掉delete[] movedArray; movedArray=0; 后就不会,我很迷惑

各位,0就是NULL.详见C++ primer

这程序问题在于int len=strlen(array);
len是计算的字符串的长度,不包含'\0'
而后面movedArray[len]='\0';已经越界了.
所以这里
char *movedArray=new char[len];
改成
char *movedArray=new char[len+1];

================================
#include<iostream>
#include<string>

using namespace std;

#define MaxNum 20

int main()
{
char *array = new char[MaxNum];
int num=0;
cout<<"输入一个字符串,长度最大为20个字节:";
cin>>array;
int len=strlen(array);

if(len>20)
{
cout<<"字符串太长!";
delete [] array;
exit(0);
}

else
{
cout<<"请输入要将上述字符串右移的位数:";
cin>>num;
char *movedArray = new char[len+1];//将右移后的字符存储在该数组中
for(int i=0;i<len;i++)
{
movedArray[(i+num)%(len)]=array[i];