Re: [問題] 關於字串 assign 到指標或陣列的問題

看板C_and_CPP作者 (Ran)時間14年前 (2009/09/30 16:32), 編輯推噓5(5011)
留言16則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《monkeyting (超人一號)》之銘言: : 1. 把 struct 中間的 char *name 改為 char name[32] 就會錯誤 : 訊息為 : incompatible types in assignment of `const char[10]' to `char[32]' : 2. 改為 char name[32] 後 用 person Mary={18,160,"Super MAN"}; : 就又行了? : 謝謝回答 1: char name[32] 是在memory中malloc一塊32 * sizeof(char *)的空間, 這時的name是指向那塊memory的const poniter, name = "abc" 是把name變成指向"abc"的poniter, 你再去reassign name當然會出問題 2: 那是因為person Mary={18, 160, "Super MAN"}是直接將struct Mary 初始化成{}裡的value... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.140.195

09/30 16:35, , 1F
1.應該不能說是malloc compile time就決定好sizeof(char)*32
09/30 16:35, 1F

09/30 16:59, , 2F
嗯 我一般是理解成compile自己malloc自己free
09/30 16:59, 2F

09/30 17:12, , 3F
local var不應該理解成compiler自己malloc/free, 它是
09/30 17:12, 3F

09/30 17:13, , 4F
透過OS stack push/pop出來的, 存放的記憶體節區不同,
09/30 17:13, 4F

09/30 17:18, , 5F
另外, Heap管理應該也比Stack push/pop複雜麻煩得多XD
09/30 17:18, 5F

09/30 17:27, , 6F
1. 的說法很怪異, 如果是 pointer 去接 malloc 出來的位址
09/30 17:27, 6F

09/30 17:27, , 7F
那 reassign 並沒有什麼問題, 這題主要問題是在 array 和
09/30 17:27, 7F

09/30 17:28, , 8F
pointer 的差別吧
09/30 17:28, 8F

09/30 18:05, , 9F
是 會這樣理解只是方便我自己在trace code時會memory的
09/30 18:05, 9F

09/30 18:06, , 10F
使用情形
09/30 18:06, 10F

09/30 18:06, , 11F
實際上應該是如VictorTom所說的
09/30 18:06, 11F

09/30 18:07, , 12F
一不小心就把自己的想法打了上去
09/30 18:07, 12F

10/04 00:32, , 13F
其實這塊mem是在一開始loader讀入segment時作alloc的
10/04 00:32, 13F

10/04 00:33, , 14F
而之後的動作並不算是malloc, 因為這裡一整塊都在data seg
10/04 00:33, 14F

10/04 00:34, , 15F
因此執行期間是直接取用data seg的內容
10/04 00:34, 15F

10/04 00:34, , 16F
這個內容是在compiler time決定好得 已經寫在bin/obj file
10/04 00:34, 16F
文章代碼(AID): #1AmnULyg (C_and_CPP)
文章代碼(AID): #1AmnULyg (C_and_CPP)