关于C语言局部变量空间开辟的问题
各位好,在学习字符串过程中,遇到空间开辟问题上的疑惑,望得到指教.代码如下:
#include <stdio.h>
#include <assert.h>
char *my_strcpy(char *desc,const char *src)
{
assert((src != NULL) && (desc != NULL));
char *cpystr = desc;
while((*desc++ = *src++) != '\0')
;
return cpystr;
}
int main(void)
{
char *src = "hello world!";
char desc[10] = {};
char ch[12] = {'a', 'b'}; //本意是想看desc不够长度时是否会将此空间冲刷
//通过打印,发现desc的首地址居然在ch之前
//而如果desc长度设置为20却反而在ch之后了
printf("desc point %p, ch point %p\n", desc, ch);
printf("%s \n", my_strcpy(desc, src));
printf("ch[0] = %c, ch[1] = %c\n", ch[0], ch[1]);
return 0;
}
请教一下编译器是如何开辟这些空间的?
[解决办法]
讨论这个问题前,你要告诉大家是什么编译器,多少位的机器。
建议你最好把代码转换成汇编语言看一看,就明白了。
有的问题不必问别人,因为别人也很难说清楚。
[解决办法]
我运行的结果desc point 0240FF40, ch point 0240FF30