着实无法理解,为什么已经赋值的 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
并且,在用新的指针赋值之后,这个 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);
}
运行结果:
[root@iZwz94s0djlh8ob47gwodcZ Ctest]# ./test
c=6,d=7
world1-world1
c=6,d=7
测试了 gcc 和 clang,只有 gcc 出现这个问题。
