1. 程式人生 > >[c++ 溫故知新]類內char* 指標記憶體分配長度

[c++ 溫故知新]類內char* 指標記憶體分配長度

已開始接觸開發工作時,面對類內char* 指標,有時候在對其賦值時,面對記憶體分配長度往往不知所措,如字串長度1024,

我們實際分配記憶體的時候,需要分配1024+1的記憶體,最後一位用於賦值‘’\0‘,如果不這麼做的話,就會下面這樣:

#include <iostream>
using namespace std;

class test
{
public:
	test(const char*);
	~test(){}
	char* m_pstr;
};

test::test(const char* str):m_pstr(NULL)
{
	int len=strlen(str);
	//m_pstr=new char[len+1];
	//memset(m_pstr,0,len+1);
	m_pstr=new char[len];
	memset(m_pstr,0,len);
	memcpy(m_pstr,str,len);
}

int main()
{
	char* s="hello world";
	test t=s;
	cout<<t.m_pstr<<endl;
}
上面的程式碼輸出結果會亂碼,因為c++輸出字串時,只要沒有讀取到‘\0’就會一直進行下去,因此把char* 記憶體分配為適當的長度(len+1),並在最後賦值‘\0‘,就可以了