|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
void copy(char *from,char *to);
int main(){
char *a="i am a boy";
char b[]="no";
char *p=b;
printf("a=%s\n",a,p);
printf("%s\n",b);
copy(a,p);
printf("%s\n",b);
printf("%d\n",sizeof(b));
return 0;}
void copy(char *from,char *to){
for(;*from!='\0';from++,to++)
*to=*from;
*to='\0';
}
按道理讲b这个数组已经替换成了i am not a boy 了,但是为什么sizeof测试还是3,还是初始化时候的"no"的长度呢,我又试了试,
把b[]改成b[10],输出的就为10,是在定义的时候就已经分配完内存空间了所以之后新扩展的内存空间不算吗?
求大佬们指点迷津!
首先纠正一下,sizeof不是函数!!!它只是操作符,用来计算变量类型所占空间大小或类型所占空间,
只不过某些情况必须有括号而已,如sizeof(int);这种计算类型的操作,其余情况为可选。
第一次声明时b所占总字节数就已经确定,后面就算你越界拷贝也还是前面定义处所占空间大小,所以你写char b[10];计算的大小就是10bytes。
PS: 这种越界拷贝行为是隐藏的BUG,容易使程序崩溃。
|
|