来看看这两个程序
#include <stdio.h> void copy(char *to,char *from )
{ while((*to++=*from++)!='\0'); } main() { char a[]="china"; char b[]="ewe"; copy(a,b); printf("%s\n",a); }
#include <stdio.h> void copy(char *to,char *from )
{ while((*to++=*from++)!='\0'); } main() { char *a="china"; char *b="ewe"; copy(a,b); printf("%s\n",a); } 这两程序有什么区别,为什么第二个不能得到正确结果
----------------解决方案--------------------------------------------------------
#include <stdio.h> void copy(char *to,char *from )
{ while((*to++=*from++)!='\0'); *to='\0'; } main() { char *a="china"; char *b="ewe"; copy(a,b); printf("%s\n",a); } 这样试试!
----------------解决方案--------------------------------------------------------
你得不到?我两个程序的结果可都是一样的哈!
----------------解决方案--------------------------------------------------------
[此贴子已经被作者于2005-3-5 18:26:12编辑过]
----------------解决方案--------------------------------------------------------
TC2.0 两个程序一样正确运行……
Visual Stdio 6.0 中指针运行提示错误!
数组运行正确
[此贴子已经被作者于2005-3-5 22:06:26编辑过]
----------------解决方案--------------------------------------------------------
大概是这样的:
程序里的字符串常量其实是在text段里面的。而这text段作对可重入程序来说是不允许运行期修改的,也就是只读的。
指针的方式写的那段,直接对text段内的字符串坐写操作就发生了保护错误。
而在tc下(是不是叫做虚拟的实模式?),其实并没有考虑重入问题。所以写就写了。
----------------解决方案--------------------------------------------------------