着实无法理解,为什么已经赋值的 c 和 d 会在 strcpy 之后改变原值(这里故意设置错误下标导致复制越界)
#include <stdio.h>
#include <string.h>
int main(){
char a[6]={"hello"},b[7]={"world1"};
// a[]="hello";
// b[]="world";
int c,d;
int *c_,*d_;
c=(int)sizeof(a)/sizeof(*a);
d=(int)sizeof(b)/sizeof(*b);
// c_=&c;
// d_=&d;
// printf("c_=%p\td_=%p\n",c_,d_);
// printf("c=%p\td=%p\n",&c,&d);
printf("c=%d,d=%d\n",c,d);
strcpy(a,b);
printf("%s-%s\n",a,b);
printf("c=%d,d=%d",c,d);
}
运行结果:
!run1
[root@iZwz94s0djlh8ob47gwodcZ Ctest]# ./test
c=6,d=7
world1-world1
c=6,d=0
#include <stdio.h>
#include <string.h>
int main(){
char a[6]={"hello"},b[7]={"world1"};
// a[]="hello";
// b[]="world";
int c,d;
int *c_,*d_;
c=(int)sizeof(a)/sizeof(*a);
d=(int)sizeof(b)/sizeof(*b);
c_=&c;
d_=&d;
// printf("c_=%p\td_=%p\n",c_,d_);
// printf("c=%p\td=%p\n",&c,&d);
printf("c=%d,d=%d\n",c,d);
strcpy(a,b);
printf("%s-%s\n",a,b);
printf("c=%d,d=%d",c,d);
}
运行结果:
[root@iZwz94s0djlh8ob47gwodcZ Ctest]# ./test
c=6,d=7
world1-world1
c=6,d=7
测试了 gcc 和 clang,只有 gcc 出现这个问题。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.