读书人

字符串相关,该如何解决

发布时间: 2012-03-19 22:03:04 作者: rapoo

字符串相关
在函数中

char a[]=“adsfadsf”;

其中字符串是存在静态区,但a是个局部变量,

存储方式不是冲突了吗,请求解答。

[解决办法]
char a[]=“adsfadsf”;

a是局部对象--一个char类型的数组(在栈区).
“adsfadsf”的确是常量字符串,是在静态区的(勉强这么分区吧)."

char a[]=“adsfadsf”;
//这句的意思是用常量字符串"adsfadsf"初始化数组a.运行到这里时会把a执行一个类似strcpy(a,"adsfadsf");这样的动作.

a是可以修改了,他只是常量字符串的copy

[解决办法]
我的#4不完全正确(又没看清,今天有点晕)
a[]会在栈上申请空间,然后将常量字串拷入
看下汇编便知:

Assembly code
 ;    char a[]="adsfadsf"; ;    @1:    mov       eax,dword ptr [$elambaia]  //$elambaia在常量段_DATA    segment     mov       dword ptr [ebp-12],eax      //a[]在栈上,这段程序是将数据copy入    mov       eax,dword ptr [$elambaia+4]    mov       dword ptr [ebp-8],eax    mov       al,byte ptr [$elambaia+8]    mov       byte ptr [ebp-4],al 

读书人网 >C语言

热点推荐