之前在对new 出来的char * 指针进行操作的时候,发现在delete的时候总是会报错,后来上网查资料是说在赋值的时候,由于字符串是存放在字符串常量区的,当你用字符串对其进行赋值的时候,其指向的地址就已经发生了改变。
#include<iostream>
#include<string>
using namespace std;
int main()
{
char *ch = new char[4]; //对于New 申请的字符指针,其内存区域并没有进行相应的赋值,
//要对其进行相应的赋值只能通过指针或者数组进行,而不能直接采用字符串直接操作
/*ch[0] = '1'; //通过数组进行操作
ch[1] = '2';
ch[2] = '4';
ch[3] = '\0';*/
/*char *temp = ch; //通过一个临时指针变量来保存字符指针的首地址
for (int i = 0; i < 3; ++i,ch++)
*ch = '1';
*ch = '\0';
ch = temp;*/
string a="123"; //通过拷贝函数进行赋值
strcpy_s(ch,4,a.c_str()); //如果是给 New 出来的内存进行copy赋值,是需要中间这个参数的
char p[6] = {}; //像下面这种不是New 出来的内存,是不要三个参数的,使用起来和strcpy 是一样的
strcpy_s(p,a.c_str());
cout << p << endl;
//ch = "123"; //用这种方式不能正常delete,指针的地址发生了改变
cout << "ch= " << ch<< endl;
cout << &ch << endl;
delete[] ch;
return 0;
}