首先,string是类,char*属于基本数据类型
其次,const_cast只能改变指针的const属性,而不能改变或者去掉本身的const属性
测试代码:
// memcpyTest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "string" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { string Str = "abcd"; char *pChar = "mmnddd"; //pChar[0]='j'; // 出现访问冲突异常 //char *pstr1 = Str.c_str(); //类型异常 //const char *pstr1 = Str.c_str(); pstr1[0]='g'; //错误 char *pStr = const_cast<char*>(Str.c_str()); // 去掉const属性 pStr[0]='h'; char *pchar1 = const_cast<char*>(pChar); // 去掉const属性 //pchar1[0]='e'; // 出现访问冲突异常,去不掉本身的const属性 //若想要去掉必须分配堆空间 char *pchar2 = new char[8]; //pchar2 = pChar; //pchar2[0]= 'e';//这样也不行,只是指针指向了同一块内存区域,这块区域谁都不能动 memcpy(pchar2,pChar,sizeof(pchar2)*2); pchar2[strlen(pChar)+1]='\0'; pchar2[0]='e'; //正确 return 0; }