Re: [問題] char *str="test"是const字串的問題

看板C_and_CPP作者 (System hacked)時間18年前 (2005/11/17 17:37), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
※ 引述《Aligu1009 (=.=)》之銘言: : 請問各位 : char *str="test"; : 這種寫法 : 這個字串會被當作是const而不能更改 : 類似的寫法如: : char str[] = "test"; : 這個字串就是可變更的了 : C為什麼要對第一種寫法做這種限制呢? 謝謝 因為要提供兩種 implement 的方法?前者會被放到 read-only section,後者 會被放到 stack。 這是 char.c: #include <stdio.h> int main(void) { char *a1 = "test123456"; char a2[] = "test654321"; } 這是 gcc -O0 -S char.c 所產生出來的 char.s: gslin@netnews [~/work/C] [17:41/W3] cat char.s .file "char.c" .section .rodata .LC0: .string "test123456" .LC1: .string "test654321" .text .p2align 2,,3 .globl main .type main, @function main: pushl %ebp movl %esp, %ebp pushl %edi pushl %esi subl $32, %esp andl $-16, %esp movl $0, %eax ; 這五行是什麼鬼... 該不會 -O0 addl $15, %eax ; 就是這麼廢吧 XD addl $15, %eax shrl $4, %eax sall $4, %eax subl %eax, %esp ; 空出一塊 stack space movl $.LC0, -12(%ebp) leal -40(%ebp), %edi ; %edi = destination movl $.LC1, %esi ; %esi = source cld ; copy order movl $11, %ecx ; copy 11 bytes rep ; 這兩個指令就是 copy 的動作 movsb leal -8(%ebp), %esp popl %esi popl %edi leave ret .size main, .-main .ident "GCC: (GNU) 3.4.4 [FreeBSD] 20050518" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.54.119
文章代碼(AID): #13V4zdMY (C_and_CPP)
文章代碼(AID): #13V4zdMY (C_and_CPP)