[問題] C++的問題

看板C_and_CPP作者 (咕嚕)時間15年前 (2009/02/11 12:10), 編輯推噓3(3016)
留言19則, 8人參與, 最新討論串1/2 (看更多)
#include <stdio.h> #include <stdlib.h> #include <string.h.> class car { public: int wheel; int person; char name[]; }; int main() { car truck, bus, taxi; bus.wheel=6; bus.person=40; strcpy(bus.name, "公車"); truck.wheel=8; truck.person=3; strcpy(truck.name, "卡車"); taxi.wheel=4; taxi.person=5; strcpy(taxi.name, "計程車"); printf("%s有%d個輪子,可載%d人\n", bus.name, bus.wheel, bus.person); printf("%s有%d個輪子,可載%d人\n", truck.name, truck.wheel, truck.person); printf("%s有%d個輪子,可載%d人\n", taxi.name, taxi.wheel, taxi.person); system("pause"); } 有2075488429個輪子,可載44712人 卡車有8個輪子,可載3人 計程車有4個輪子,可載5人 請按任意鍵繼續 . . . 有2075488429個輪子,可載44712人 卡車有8個輪子,可載3人 計程車有4個輪子,可載5人 請按任意鍵繼續 . . . 以上是執行結果: 紅色那行有問題 而且我按任意鍵想結束 結果不會結束 反而再跑出一個執行結果 要按cmd視窗的x才能關掉視窗 orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.161.198

02/11 12:11, , 1F
我在想是不是又是一些蠢問題 但我找了好久 找不出來@@
02/11 12:11, 1F

02/11 12:15, , 2F
你把字串用int輸出...
02/11 12:15, 2F

02/11 12:19, , 3F
字元陣列的長度沒給 給了以後就可以正常執行了
02/11 12:19, 3F

02/11 12:19, , 4F
不過我也不知道為什麼...
02/11 12:19, 4F

02/11 12:22, , 5F
本來就該給吧....
02/11 12:22, 5F

02/11 12:23, , 6F
可是卡車跟計程車都正常耶@@
02/11 12:23, 6F

02/11 12:23, , 7F
改好了 正常了 可是為什麼原本卡車跟計程車是正常的?
02/11 12:23, 7F
※ 編輯: Ygulu 來自: 118.169.161.198 (02/11 12:24)

02/11 12:25, , 8F
字元陣列長度設1也可以@@
02/11 12:25, 8F

02/11 13:20, , 9F
設 1 還是可能會有問題的
02/11 13:20, 9F

02/11 13:21, , 10F
沒問題是運氣好有 padding
02/11 13:21, 10F

02/11 13:22, , 11F
計憶體個管理要小心, 公車會爛是因為被別的車碾過了
02/11 13:22, 11F

02/11 13:23, , 12F
別的車空間不夠往後寫寫到公車的記憶體
02/11 13:23, 12F

02/11 13:41, , 13F
char name[] 跟 char* name 好像一樣
02/11 13:41, 13F

02/11 13:41, , 14F
所以只有sizeof(void*) 大小
02/11 13:41, 14F

02/11 13:42, , 15F
用 taxi.name = strdup("計程車");
02/11 13:42, 15F

02/11 13:43, , 16F
class 再加一個 dtor 去 safe delete name
02/11 13:43, 16F

02/11 14:09, , 17F
如果是 bus.name = "公車" 就會對了吧
02/11 14:09, 17F

02/11 14:10, , 18F
不過這是不好的做法("公車"字串常數位址直接送給物件)
02/11 14:10, 18F

02/12 18:53, , 19F
我覺得你是在寫C 不是寫C++
02/12 18:53, 19F
文章代碼(AID): #19aa_3ct (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19aa_3ct (C_and_CPP)