動態記憶體配置與字串

字串的使用
當需要使用者輸入的時候
如果使用字元陣列
會產生一個問題

不像預設值一樣
可以根據字串的內容
來自動設定元素大小
char str[]=”Bello!”;
等於說
要接收使用者輸入的字串時
對於字元陣列來說
只能設定一個很大的值來應付
當有使用者用不完預設的空間
剩下的空間就浪費掉
字串數量少還好
但是資料一多
會造成很龐大的記憶體空洞
有沒有方法可以處理這個問題呢?
能不能在程式運行中
取得需要的記憶體空間就好
因此
有了動態記憶體配置
可以利用new關鍵字以及delete關鍵字
進行記憶體的取得與釋放
字串使用動態記憶體配置格式(預設值):
char* temp=”Bellow!”;
int len= strlen(temp);
char* 指標名稱;
指標 = new char[len+1];

strcpy(指標,temp);

Ex:

[code language=”cpp”]
#include <iostream>
#include <cstring> //記得要引入cstring標頭檔
using namespace std; //以便使用strlen以及strcpy函數

int main(){

char* temp="Bellow!"; //宣告字元指標,並且把它指向字串

int len=strlen(temp); //用strlen取得字串長短,並且把它指定給變數len

char* ptr; //宣告指標ptr

ptr=new char[len+1]; //利用new關鍵字配置
//new會傳回記憶體位址
//我們用指標接收位址

strcpy(ptr,temp); //將temp指向的字串,複製給ptr所指向的陣列

//印出ptr所指的陣列內容
for(int k=0;k<len;k++){

cout << *(ptr+k);

}

delete [] ptr; //記得釋放用完的記憶體空間

}
[/code]

因為要把字串尾端的’/0’算在裡面
所以字串大小要加+1
了解基礎的字串記憶體配置之後
接下來我們來解決剛剛的問題
字串使用動態記憶體配置格式(使用者輸入):
char temp[足夠的元素數目];
gets(temp);
int len= strlen(temp);
char* 指標名稱;
指標 = new char[len+1]

strcpy(指標,temp);

Ex:

 

[code language=”cpp”]
#include <iostream>
#include <cstring> //記得要引入cstring標頭檔
using namespace std; //以便使用strlen以及strcpy函數

int main(){

char temp[300]; //宣告暫時的字元陣列 <span style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" data-mce-type="bookmark" class="mce_SELRES_start"></span>

gets(temp); //利用get函數,取得鍵盤輸入的字串

int len=strlen(temp); //用strlen取得字串長短,並且把它指定給變數len

char* ptr; //宣告指標ptr

ptr=new char[len+1]; //利用new關鍵字配置
//new會傳回記憶體位址
//我們用指標接收位址

strcpy(ptr,temp); //將temp指向的字串,複製給ptr所指向的陣列

//印出ptr所指的陣列內容
for(int k=0;k<len;k++){

cout << *(ptr+k);

}

delete [] ptr; //記得釋放用完的記憶體空間

}

[/code]

有疑問? 留個言吧!

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料