[問題] 類別中的 constructor 問題

看板C_and_CPP作者 (ricebug)時間13年前 (2012/10/30 01:44), 編輯推噓2(207)
留言9則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) DevC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): #include <iostream> #include <cstdlib> using namespace std; class tra { private: char from[4]; char to[4]; int train_no; public tra(char *ptra="台北", char *ptrb="新竹", int c=1001) { strcpy(from,ptra); strcpy(to,ptrb); train_no = c; } void show(0 { cout<<"從"<<from<<"到"<<to<<endl; cout<<"車次為"<<train_no<<endl; } }; int main() { tra ticket; ticket.show(); return 0; } 餵入的資料(Input): 預期的正確結果(Expected Output): 本來是希望看到輸出結果為,車票資訊從台北到板橋,車次為1001。 但是輸出時,卻是出現從台北板橋到板橋。 ^^^^^^^^ ^^^^ 然而,我是故意讓char from[]只有4的大小,如果調成5,則輸出就正常了。 很好奇為什麼當我把前面的陣列大小縮減到不足以裝下兩個中文字的大小時 (因為還要留1byte給結束字元),會出現這種不預期的錯誤。 (from 居然也會出現 to 貼上來的字。) 想了很久,但是還是想不出個所以然。希望有高手可以幫助解惑,感謝感謝! 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.171.196.89

10/30 01:49, , 1F
如果你會組合語言,就去看編出來的組合語言吧
10/30 01:49, 1F

10/30 01:50, , 2F
如果你不會組語,那現在還不是探討未定義行為的時候
10/30 01:50, 2F

10/30 01:59, , 3F
可能的原因:cout要看到'\0'才會停,而from的'\0'剛好被
10/30 01:59, 3F

10/30 02:00, , 4F
to給蓋掉了,也就是from[4]跟to[0]是同一個位置
10/30 02:00, 4F

10/30 02:20, , 5F
原來如此呀,感謝jame732大的說明!!
10/30 02:20, 5F

10/30 06:22, , 6F
相信用string你的人生會更愉快
10/30 06:22, 6F

10/30 11:22, , 7F
沒事別用char*搞自己
10/30 11:22, 7F

10/30 13:03, , 8F
用char*直接宣告一個字串 100000%最後一個字要放\0
10/30 13:03, 8F

10/31 02:40, , 9F
"字元陣列"當字串用要加"結束字元('\0')"
10/31 02:40, 9F
文章代碼(AID): #1GZi1uom (C_and_CPP)