[問題] strcpy記憶體位址變掉
最近在研究字串複製的使用(strcpy, strncpy, memcpy, snprintf)
在strcpy的case中,有兩種情況下會Segmentation fault(程式碼1, 2)
問題.想請問在[程式碼1]為什麼src的大小超過dest的大小
會讓src的address變了呢? (由原本的0x8048af5到0x8040030)
而導致在strcpy的時候沒事,而在印src字串時導致Segmentation fault
謝謝!!
[程式碼1]
void test()
{
char dest[5] = "ABCDE";
char *src = "1234567890";
printf("Dest = %s, Address = %p\n", dest, dest);
printf("Src = %s, Address = %p\n", src, src);
strcpy(dest, src);
printf("======================================\n");
printf("[strcpy] Dest = %s, Address = %p\n", dest, dest);
printf("[strcpy] Src Address = %p\n", src);
printf("[strcpy] Src = %s\n", src);
}
[執行結果]
# ./a.out
Dest = ABCDE, Address = 0xbffa7e53
Src = 1234567890, Address = 0x8048af5
======================================
[strcpy] Dest = 1234567890, Address = 0xbffa7e53
[strcpy] Src Address = 0x8040030
Segmentation fault (core dumped)
[程式碼2]
char dest[5] = "ABCDE";
char src[10] = "1234567890";
strcpy(dest, src);
[執行結果2]
因為src沒有\0停下來 所以strcpy會導致複製src時會一直複製,而產生Segmentation
fault
E 5
D 4
C 3
B 2
Dest A 1
0
9
8
7
6
5
4
3
2
Src 1
[strcpy原型]
char *strcpy(char *s1, const char *s2)
{
char *s = s1;
while ((*s++ = *s2++) != 0) {
;
}
return (s1);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.33.23
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1422246192.A.D93.html
推
01/26 12:42, , 1F
01/26 12:42, 1F
→
01/26 13:10, , 2F
01/26 13:10, 2F
→
01/26 13:26, , 3F
01/26 13:26, 3F
→
01/26 13:32, , 4F
01/26 13:32, 4F
→
01/26 13:36, , 5F
01/26 13:36, 5F
→
01/26 13:36, , 6F
01/26 13:36, 6F
→
01/26 13:37, , 7F
01/26 13:37, 7F
推
01/26 15:05, , 8F
01/26 15:05, 8F
→
01/26 15:06, , 9F
01/26 15:06, 9F
→
01/26 15:09, , 10F
01/26 15:09, 10F
推
01/26 17:45, , 11F
01/26 17:45, 11F
→
01/26 18:17, , 12F
01/26 18:17, 12F
→
01/26 18:48, , 13F
01/26 18:48, 13F
→
01/26 18:53, , 14F
01/26 18:53, 14F
→
01/26 18:54, , 15F
01/26 18:54, 15F
→
01/26 18:55, , 16F
01/26 18:55, 16F
→
01/26 18:56, , 17F
01/26 18:56, 17F
→
01/26 18:56, , 18F
01/26 18:56, 18F
推
01/26 21:08, , 19F
01/26 21:08, 19F
→
01/27 00:16, , 20F
01/27 00:16, 20F
→
01/27 08:01, , 21F
01/27 08:01, 21F
→
01/27 08:05, , 22F
01/27 08:05, 22F
→
01/27 08:47, , 23F
01/27 08:47, 23F
→
01/27 10:03, , 24F
01/27 10:03, 24F
→
01/27 10:04, , 25F
01/27 10:04, 25F
→
01/27 10:04, , 26F
01/27 10:04, 26F
→
01/27 14:38, , 27F
01/27 14:38, 27F
→
01/27 14:42, , 28F
01/27 14:42, 28F
→
01/27 14:43, , 29F
01/27 14:43, 29F
→
01/27 14:44, , 30F
01/27 14:44, 30F
→
01/27 14:45, , 31F
01/27 14:45, 31F
→
01/27 14:54, , 32F
01/27 14:54, 32F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章