首先,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;