作者ranshell (Ran)
看板C_and_CPP
標題Re: [問題] 關於字串 assign 到指標或陣列的問題
時間Wed Sep 30 16:32:20 2009
※ 引述《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
1F:推 QQ29:1.應該不能說是malloc compile time就決定好sizeof(char)*32 09/30 16:35
2F:→ ranshell:嗯 我一般是理解成compile自己malloc自己free 09/30 16:59
3F:推 VictorTom:local var不應該理解成compiler自己malloc/free, 它是 09/30 17:12
4F:→ VictorTom:透過OS stack push/pop出來的, 存放的記憶體節區不同, 09/30 17:13
5F:推 VictorTom:另外, Heap管理應該也比Stack push/pop複雜麻煩得多XD 09/30 17:18
6F:推 ledia:1. 的說法很怪異, 如果是 pointer 去接 malloc 出來的位址 09/30 17:27
7F:→ ledia:那 reassign 並沒有什麼問題, 這題主要問題是在 array 和 09/30 17:27
8F:→ ledia:pointer 的差別吧 09/30 17:28
9F:→ ranshell:是 會這樣理解只是方便我自己在trace code時會memory的 09/30 18:05
10F:→ ranshell:使用情形 09/30 18:06
11F:→ ranshell:實際上應該是如VictorTom所說的 09/30 18:06
12F:→ ranshell:一不小心就把自己的想法打了上去 09/30 18:07
13F:推 sunneo:其實這塊mem是在一開始loader讀入segment時作alloc的 10/04 00:32
14F:→ sunneo:而之後的動作並不算是malloc, 因為這裡一整塊都在data seg 10/04 00:33
15F:→ sunneo:因此執行期間是直接取用data seg的內容 10/04 00:34
16F:→ sunneo:這個內容是在compiler time決定好得 已經寫在bin/obj file 10/04 00:34