Re: [問題] char *str="test"是const字串的問題
看板C_and_CPP (C/C++)作者DarkKiller (System hacked)時間19年前 (2005/11/17 17:37)推噓0(0推 0噓 0→)留言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
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章