求解答,关于 C 使用 strcpy 问题
資深大佬 : NoahNye 3
着实无法理解,为什么已经赋值的 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_=%ptd_=%pn",c_,d_); // printf("c=%ptd=%pn",&c,&d); printf("c=%d,d=%dn",c,d); strcpy(a,b); printf("%s-%sn",a,b); printf("c=%d,d=%d",c,d); }
运行结果: !run1 [[email protected] 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_=%ptd_=%pn",c_,d_); // printf("c=%ptd=%pn",&c,&d); printf("c=%d,d=%dn",c,d); strcpy(a,b); printf("%s-%sn",a,b); printf("c=%d,d=%d",c,d); }
运行结果:
[[email protected] Ctest]# ./test
c=6,d=7
world1-world1
c=6,d=7
测试了 gcc 和 clang,只有 gcc 出现这个问题。
大佬有話說 (14)