作者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