此程序在TC3.0没问题,在VC++6.0运行却有误,为何???

来源:百度知道 编辑:UC知道 时间:2024/06/15 20:27:16
#include"stdio.h"
void cpy(char *from,char *to){
while((*to++=*from++)!='\0');}
void main(){
char *a="I am a man!";char *b="You are a man!";
printf("40612019\tliaoxueqiang\n");
puts(a);puts(b);
cpy(a,b);printf("Copy of a:\n");
puts(b);
}

你能在TC3.0运行,而在VC++6.0运行却有误不是因为TC3.0和vc6.0有什么区别,而是根本你的代码就有bug,TC3能运行是因为你运气好,指针内存越界正好到内存没有用到的地方。

看看你这一句while((*to++=*from++)!='\0');}

你确定你to指针的内存块和*from的内存块大小一致吗?
看看:
char *a="I am a man!";
char *b="You are a man!";
明显a的内存块比b要小,你这么个拷贝法当然死机了。

看来自己从来不写可能带来bug的语句的后果之一就是看不出别人的bug啊……

楼上观点正确,你对a的引用会出现非法