class test{
public:
test(){
ITEM[0].i=0; ITEM.str="aaaaaaaaaaaaaaaaaaaaaaaaa";
ITEM[1].i=1; ITEM.str="bbbbbbbbbbbbbbbbbbbbbbbbb";
}
private:
struct item{
int i;
char *str;
};
struct item ITEM[2];
};
若於constructor初使化每一個ITEM中的str,
那..,會不會把蓋掉memoey的東西.....(如:aaaaaaaaa...aaa很長,
會蓋掉系統的一些重要部份,而runtime error)
我所不清楚的是,這樣寫constructor,那declare一個test object時,
對於struct中的*str有兩種考量,
1.*str只是一個指向char的pointer,若於constructor
初使化*str,那會不會蓋掉str之後的memoey.
2.於初始化時,會保留空間(看ITEM.str的所接的string是多少就保留多少,
如同宣告char *str2="aaaaaaa...aaaaaa"一樣安全).
哪一個正確ㄋ..,還是都錯誤..,請高人指點迷津....
(PS.我試了以類似的例子,run time都正常啦,不過這也不表示沒問題,
也許是幸運沒遇到吧!)
還有另一個問題,若想初始化一個class的member時,一定要在constructor嗎?
還是有其他方法.我試過宣告成static與const都不行說...
Thank you..
--
[1;32m※ Origin: [33m摩卡小築 [37m<moca.csie.chu.edu.tw> [m
[1;31m◆ From: [36mdialup-143.ts.chu.edu.tw [m
> 哪一個正確ㄋ..,還是都錯誤..,請高人指點迷津....
> (PS.我試了以類似的例子,run time都正常啦,不過這也不表示沒問題,
> 也許是幸運沒遇到吧!)
public:
test() {
Item[0].i =0; ITEM[0].str = new char[strlen("aaaaaaa") + 1];
strcpy(ITEM[0].str, "aaaaaaa");
....
}
1. 指標一定要有所指 (ex: 指向動態配置好的記憶體空間) 才能使用。
2. 字串得用 strxxx() 等函式去處理。
這兩點不管是學 C 或 C++ 都一樣重要。
--
mbox: m...@im.fju.edu.tw
Web : http://mmlab.im.fju.edu.tw/~maa
--
[1;32m※ Origin: [33m謠 言 報 [37m<bbs.csie.fju.edu.tw> [m
[1;31m◆ From: [36mTS2-PPP-06.fju.edu.tw [m
我也看不懂耶
初始化的動作蓋掉memory重要的東西
都才剛開始那來重要的東西?
看看我這樣回答有沒有你想要的
a、字串的處理
char *text;
在run time時想改變所指字串的內容
*text="aaa";
*text="aaabbb";
其中text是static variable
"aaa","aaabbb"是dynamic variable
而且三者所佔用的位址空間均不同…所以不會有〞蓋掉〞的情況
b、陣列的處理
int a[10];
假設我們run time時想改變陣列的大小,例如:
a[20]=256;
這時可能會發生什麼事?
1、忽略這行述敘,throw expection
2、〞蓋掉〞重要的東西
這是唯一可能會發生〞蓋掉〞的情況
--
[1;32m※ Origin: [33m台灣科大電子站 [37m<bbs.et.ntust.edu.tw> [m
[1;31m◆ From: [36m140.118.234.53 [m
忘了說這是C中的情況