[問題] malloc's buffer size
小弟今天突然發現原來自己對 malloc 超級不熟....
舉個例子
char *str = (char *)malloc(sizeof(char));
就我理解他是回傳一個char型態的位址,並且長度為1個 byte
但是我居然可以在裡面塞下很多東西,如下:
strcpy(str, "a");
printf("%s\n", str);
strcat(str, "b");
printf("%s\n", str);
strcat(str, "c");
printf("%s\n", str);
一樣可以印出 a, ab, abc
問題:str的buffer size到底是多少呢? 要怎麼印出來......(已爬文過 T___T
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.220.255.38
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1470297028.A.480.html
推
08/04 16:34, , 1F
08/04 16:34, 1F
→
08/04 16:34, , 2F
08/04 16:34, 2F
→
08/04 16:36, , 3F
08/04 16:36, 3F
→
08/04 16:47, , 4F
08/04 16:47, 4F
→
08/04 16:48, , 5F
08/04 16:48, 5F
→
08/04 16:50, , 6F
08/04 16:50, 6F
這個我知道,但是我想知道為什麼我可以再一個byte的空間裡面塞入多個字串
※ 編輯: EngRookie (61.220.255.38), 08/04/2016 16:54:57
→
08/04 16:57, , 7F
08/04 16:57, 7F
→
08/04 16:59, , 8F
08/04 16:59, 8F
不好意思,我有點不了解,我再同一個記憶體位置放入"a",那麼我 strcat(str, "b")時,這個b應該是會放入 str+1 的位置
但是很明顯我並沒有分配 str+1 的位置出來,是我觀念有點問題嗎 T___T
※ 編輯: EngRookie (61.220.255.38), 08/04/2016 17:14:11
推
08/04 17:16, , 9F
08/04 17:16, 9F
→
08/04 17:16, , 10F
08/04 17:16, 10F
→
08/04 17:24, , 11F
08/04 17:24, 11F
→
08/04 17:24, , 12F
08/04 17:24, 12F
→
08/04 17:25, , 13F
08/04 17:25, 13F
推
08/04 17:34, , 14F
08/04 17:34, 14F
我大概了解原來記憶體位置可以這樣越界操作,我之前都乖乖把記憶體範圍算好好的
謝謝各位大大的解釋
※ 編輯: EngRookie (61.220.255.38), 08/04/2016 17:36:31
推
08/04 17:35, , 15F
08/04 17:35, 15F
→
08/04 17:35, , 16F
08/04 17:35, 16F
→
08/04 17:36, , 17F
08/04 17:36, 17F
→
08/04 17:36, , 18F
08/04 17:36, 18F
→
08/04 17:36, , 19F
08/04 17:36, 19F
→
08/04 17:36, , 20F
08/04 17:36, 20F
→
08/04 17:37, , 21F
08/04 17:37, 21F
→
08/04 17:37, , 22F
08/04 17:37, 22F
→
08/04 17:37, , 23F
08/04 17:37, 23F
→
08/04 17:38, , 24F
08/04 17:38, 24F
→
08/04 17:38, , 25F
08/04 17:38, 25F
推
08/04 17:40, , 26F
08/04 17:40, 26F
推
08/04 17:40, , 27F
08/04 17:40, 27F
→
08/04 17:53, , 28F
08/04 17:53, 28F
推
08/04 19:05, , 29F
08/04 19:05, 29F
推
08/04 22:10, , 30F
08/04 22:10, 30F
→
08/04 22:13, , 31F
08/04 22:13, 31F
→
08/04 22:13, , 32F
08/04 22:13, 32F
推
08/05 10:20, , 33F
08/05 10:20, 33F
→
08/05 10:20, , 34F
08/05 10:20, 34F
推
08/05 10:26, , 35F
08/05 10:26, 35F
→
08/05 10:26, , 36F
08/05 10:26, 36F
→
08/05 10:27, , 37F
08/05 10:27, 37F
→
08/05 10:27, , 38F
08/05 10:27, 38F
→
08/05 11:22, , 39F
08/05 11:22, 39F
→
08/05 11:23, , 40F
08/05 11:23, 40F
→
08/05 17:02, , 41F
08/05 17:02, 41F
→
08/05 17:40, , 42F
08/05 17:40, 42F
→
08/05 17:41, , 43F
08/05 17:41, 43F
推
08/05 17:58, , 44F
08/05 17:58, 44F
→
08/05 17:59, , 45F
08/05 17:59, 45F
推
08/05 23:14, , 46F
08/05 23:14, 46F
推
08/06 01:01, , 47F
08/06 01:01, 47F
推
08/07 13:07, , 48F
08/07 13:07, 48F
→
08/07 13:08, , 49F
08/07 13:08, 49F
推
08/12 20:15, , 50F
08/12 20:15, 50F
推
10/21 04:30, , 51F
10/21 04:30, 51F
→
10/21 04:33, , 52F
10/21 04:33, 52F
→
10/21 04:33, , 53F
10/21 04:33, 53F
→
10/21 04:33, , 54F
10/21 04:33, 54F
→
10/21 04:34, , 55F
10/21 04:34, 55F