[問題] 為何動態記憶體配置不能先賦值再strcat?
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
問題(Question):
從問題十三誡第四條延伸思考,遇到的問題,想請大家幫忙解惑一下
(1)
這是十三誡第四條原本的用法
char s1[20] = "Hello, ";
char *s2 = "world!";
strcat(s1, s2);
(2)
黃色的部份執行就會出現segmentation fault
char *s1 = new char[20];
s1 = "Hello, ";
char *s2 = "world!";
strcat(s1, s2);
(3)
黃色的部份執行就會出現segmentation fault
char *s1 = (char *)malloc(20*sizeof(char));
s1 = "Hello, ";
char *s2 = "world!";
strcat(s1, s2);
小弟的困惑是:
(2)和(3)都用動態記憶體配置,應該是合法的空間了不是嗎?
為什麼這樣用還會有問題呢?
謝謝大家!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.176.221.68
→
11/16 19:01, , 1F
11/16 19:01, 1F
→
11/16 19:03, , 2F
11/16 19:03, 2F
推
11/16 19:41, , 3F
11/16 19:41, 3F
→
11/16 19:48, , 4F
11/16 19:48, 4F
推
11/16 20:03, , 5F
11/16 20:03, 5F
推
11/17 00:04, , 6F
11/17 00:04, 6F
→
11/17 01:04, , 7F
11/17 01:04, 7F
→
11/17 01:05, , 8F
11/17 01:05, 8F
→
11/17 01:06, , 9F
11/17 01:06, 9F
→
11/17 01:07, , 10F
11/17 01:07, 10F
→
11/17 01:08, , 11F
11/17 01:08, 11F
→
11/17 01:09, , 12F
11/17 01:09, 12F
推
11/17 01:12, , 13F
11/17 01:12, 13F
→
11/17 10:10, , 14F
11/17 10:10, 14F
→
11/17 10:11, , 15F
11/17 10:11, 15F
推
11/17 10:33, , 16F
11/17 10:33, 16F
→
11/17 10:59, , 17F
11/17 10:59, 17F
→
11/17 11:31, , 18F
11/17 11:31, 18F
→
11/17 11:32, , 19F
11/17 11:32, 19F
推
11/18 00:21, , 20F
11/18 00:21, 20F
→
11/18 09:25, , 21F
11/18 09:25, 21F
推
11/18 12:28, , 22F
11/18 12:28, 22F
→
11/18 12:29, , 23F
11/18 12:29, 23F