動態記憶體配置與字串

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

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

strcpy(指標,temp);

Ex:

#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;          //記得釋放用完的記憶體空間 

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

strcpy(指標,temp);

Ex:

 

#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;          //記得釋放用完的記憶體空間 

}



有疑問? 留個言吧!

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