線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:803
推到 Plurk!
推到 Facebook!

字串陣列記憶體配置問題

尚未結案
noline
一般會員


發表:2
回覆:3
積分:1
註冊:2004-07-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-13 15:37:15 IP:220.130.xxx.xxx 未訂閱
#include 
#include     using namespace std;    class GetStrAy
{
  private:
    char c;
    int sgCharLenMax;  //Max of single char length
    char* tempCharArray;
  public:
    int totalStr; //(total string)
    char** serialStr;
    
    GetStrAy(){
      sgCharLenMax=30;
      totalStr=0;
      tempCharArray=new char[sgCharLenMax];
      c=' '; 
     
    }
    ~GetStrAy(){
      delete tempCharArray;
      for(int i=0; i
結果:
total String=4
a:0x804a030
bc:0x804a034
def:0x804a038
ghij:0x804a03c    我這個程式是將一串字串如果有碰到"空格"就把前面那個字串單獨成一個新字串。
現在我有個疑問是說,為什麼記憶體都只是用4個bytes。
我認為
a為2個BYTES(加結束符號)
bc為3個BYTES(加結束符號)
def為4個BYTES(加結束符號)
ghij 為5個BYTES(加結束符號)        我哪裡錯了?
那我這一行不就new的怪怪的
serialStr[totalStr]=new char[strlen(tempCharArray) 1];     
        
fffhghgjh
一般會員


發表:2
回覆:33
積分:17
註冊:2004-12-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-13 19:45:03 IP:61.220.xxx.xxx 未訂閱
char** serialStr;
serialStr=new char*[(int)(strlen(sStr)/2)];
//這裡就已經指定了srialStr內有幾個指標
serialStr[totalStr]=new char[strlen(tempCharArray) 1];
//這裡再分配新位置進入serialStr[0],serialStr[1]...
 
getstr.serialStr[i] 這裡讀到是指標 所以佔了4Byte
noline
一般會員


發表:2
回覆:3
積分:1
註冊:2004-07-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-13 20:36:15 IP:61.216.xxx.xxx 未訂閱
引言:
char** serialStr;
serialStr=new char*[(int)(strlen(sStr)/2)];
//這裡就已經指定了srialStr內有幾個指標
serialStr[totalStr]=new char[strlen(tempCharArray) 1];
//這裡再分配新位置進入serialStr[0],serialStr[1]...
 
getstr.serialStr[i] 這裡讀到是指標 所以佔了
還不是很了解為什麼佔4Byte! 不是應該這樣嗎!
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-13 22:19:49 IP:211.76.xxx.xxx 未訂閱
noline你好:     請問strlen和sizeof的不同點在那?,以下面的程式為例子  
 
#include 
using namespace std;
int main(void)
{
const char* text = "Hello World!";
int length_of_text = strlen(text);
int size_of_text_pointer = sizeof(text);
}
speed
一般會員


發表:13
回覆:17
積分:6
註冊:2003-04-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-14 01:25:44 IP:218.162.xxx.xxx 未訂閱
sizeof() 假設~
  char str[]="hello";
  char *p=str;  
  int n=10;
  void *ptr=malloc(100);      cout<6bytes
  cout<    發表人 - speed 於 2005/01/14  01:30:01
        
noline
一般會員


發表:2
回覆:3
積分:1
註冊:2004-07-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-14 10:00:25 IP:220.130.xxx.xxx 未訂閱
謝謝各個前輩的解釋,我大概了解了 getstr.serialStr[0]裡面[存著]是資料'a'的位置,假設是P1 &getstr.serialStr[0]是[取得]getstr.serialStr[0]的位置,就是0x804a030 也就是說&getstr.serialStr[0]是取得[存著資料'a'的位置(P1)]的位置(0x804a030)。 所以無論資料怎麼變,getstr.serialStr[0]存著是位置,也可以說是指標,佔4個byte! 現在還有一個問題是我得怎麼取得P1,也就是資料'a'的位置及用sizeof取得它的大小? 謝謝前輩們的幫忙!
系統時間:2024-06-18 14:50:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!