当前位置: 技术问答>linux和unix
大家一起来讨论下全局变量的使用吧
来源: 互联网 发布时间:2017-02-07
本文导语: 我在linux c代码编程遇到下面这样的问题: int aa=1; char b[4]; main(){ char a[4]="1234"; memset(b,'',sizeof(b)); strcpy(b,a); printf("aa is %dn",aa); } 此时问题来了 我没有对aa做操作,这是打印的aa变成了0;如果我把b[4]编程b[8]或者下...
我在linux c代码编程遇到下面这样的问题:
int aa=1;
char b[4];
main(){
char a[4]="1234";
memset(b,'',sizeof(b));
strcpy(b,a);
printf("aa is %dn",aa);
}
此时问题来了 我没有对aa做操作,这是打印的aa变成了0;如果我把b[4]编程b[8]或者下表比4大,此时aa的值就不会改变,我很纠结,麻烦路过的顶下;
int aa=1;
char b[4];
main(){
char a[4]="1234";
memset(b,'',sizeof(b));
strcpy(b,a);
printf("aa is %dn",aa);
}
此时问题来了 我没有对aa做操作,这是打印的aa变成了0;如果我把b[4]编程b[8]或者下表比4大,此时aa的值就不会改变,我很纠结,麻烦路过的顶下;
|
如果我把b[4]编程b[8]或者下表比4大,此时aa的值就不会改变,我很纠结,麻烦路过的顶下;
strcpy(b,a);这个有问题~a字符串是5个字符 b数组只是一个4个字符的数组,拷贝会出问题
strcpy(b,a);这个有问题~a字符串是5个字符 b数组只是一个4个字符的数组,拷贝会出问题
|
char a[4]="1234"; 这个赋值也有问题~没有吧''考虑
|
内存越界了,覆盖了相邻的地址空间
|
不晓得linux下面会是怎样
在windows下面已初始化和未初始化的全局变量 所存放的地址空间是不连续滴:
已初始化滴变量会存放在一段连续的静态存储区;
而未初始化滴变量会放在另外一段开辟的连续静态存储区。
int aa=1;
char b[4];
aa,b两个变量存放的地址空间是不连续滴,所以也不可能出现因为内存越界,而覆盖了相邻的地址空间
而且楼主代码中char a[4]="1234";这应该是写错了,c字符串是已‘’结尾滴,这样编译时会报错
在windows下面这段代码的运行结果aa还是1,或许在linux下面会有所不同
在windows下面已初始化和未初始化的全局变量 所存放的地址空间是不连续滴:
已初始化滴变量会存放在一段连续的静态存储区;
而未初始化滴变量会放在另外一段开辟的连续静态存储区。
int aa=1;
char b[4];
aa,b两个变量存放的地址空间是不连续滴,所以也不可能出现因为内存越界,而覆盖了相邻的地址空间
而且楼主代码中char a[4]="1234";这应该是写错了,c字符串是已‘’结尾滴,这样编译时会报错
在windows下面这段代码的运行结果aa还是1,或许在linux下面会有所不同