风言枫语  

首先,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;
	
}
posted on 2013-08-15 19:01  风言枫语  阅读(1534)  评论(0编辑  收藏  举报