[問題] 如何在類別裡初始化字串陣列

看板C_and_CPP (C/C++)作者 (拜託讓我上~)時間16年前 (2009/07/25 18:13), 編輯推噓7(7016)
留言23則, 5人參與, 最新討論串1/1
小弟我的程式寫到卡住 不知道怎麼框正 class Deck{ public: Deck(){ suit=new char[4]; deck=new int*[4]; for(i=0;i<3;i++){ deck[i]=new int[13];} suit[0]={"good"};//這邊會出問題...... } private: int **deck; char *face,*suit; int i; }; main(){ } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.147.18 ※ 編輯: s987692 來自: 60.250.147.18 (07/25 18:34)

07/25 18:34, , 1F
用建構子...類別不能直接這樣寫
07/25 18:34, 1F

07/25 18:36, , 2F
我是用建構子呀!!
07/25 18:36, 2F

07/25 18:39, , 3F
字串不能直接這樣賦值, 請愛用 strcpy() 或 std::string
07/25 18:39, 3F

07/25 18:40, , 4F
還有"good"實際長度為5(含結尾NULL), 陣列開4會爆掉
07/25 18:40, 4F

07/25 18:41, , 5F
另外就是記得要在解構子裡釋放物件配置的記憶體
07/25 18:41, 5F

07/25 18:47, , 6F
我是用指標字串陣列 所以應該不會有裝不下的問題吧!
07/25 18:47, 6F

07/25 18:49, , 7F
妳char*suit根本不能寫suit[0]="字串" ...
07/25 18:49, 7F

07/25 18:53, , 8F
你用的是字元(char)陣列, 每一個元素的只能放一個字元喔
07/25 18:53, 8F

07/25 18:53, , 9F
妳如果要suit ="good"請把建構子改為
07/25 18:53, 9F

07/25 18:54, , 10F
Deck():suit("good") 妳產生一個Deck物建cout<<就知道了
07/25 18:54, 10F

07/25 19:27, , 11F
我用的是 *suit 後然動態產生陣列大小耶!不是 char
07/25 19:27, 11F

07/25 20:59, , 12F
剛剛沒看清楚 你的suit是"*char" 但是suit[0]是"char"
07/25 20:59, 12F

07/25 21:09, , 13F
char s[] = "ab"; 這樣才叫初始化。你那是在做 assignment
07/25 21:09, 13F

07/25 21:30, , 14F
suit[0]應該是存第一個字串的位址是嗎? 不過*suit[0] 這樣
07/25 21:30, 14F

07/25 21:31, , 15F
去賦值也不對,另外三樓大那個不是交換字串的函式嗎?
07/25 21:31, 15F

07/25 21:35, , 16F
suit的資料型態你給的是char *,所以suit[0]的資料型態是char
07/25 21:35, 16F

07/25 21:36, , 17F
你在做assignment時,只能這樣寫suit[0]='g';
07/25 21:36, 17F

07/25 21:37, , 18F
suit[0]={"good"}; 就我所知,{}應該只能在初始化時用。而且
07/25 21:37, 18F

07/25 21:38, , 19F
就算改成suit[0]="good";還是錯。因為除非是在初始化時,否則
07/25 21:38, 19F

07/25 21:38, , 20F
"good"傳回的是該字串的記憶體位址(char *),所以才要用strcpy
07/25 21:38, 20F

07/25 22:41, , 21F
喔喔 我了了,那可以請問一下strccpy()這函式主要的作用和
07/25 22:41, 21F

07/25 22:41, , 22F
用法嗎?
07/25 22:41, 22F

07/25 22:44, , 23F
爬文,或google都有說明
07/25 22:44, 23F
文章代碼(AID): #1AQjhDoM (C_and_CPP)
文章代碼(AID): #1AQjhDoM (C_and_CPP)