全民枪战20十连抽视频:关于C语言问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 20:49:29
先看一个程序:
main()
{ char *s1="ABCD",*s2="EFGH";
char *ps1=s1,*ps2=s2;
while(*s1)
s1++;
while(*s1++=*s2++);
printf("%s\n%s\n",ps1,ps2);
}
我预测的答案是:
ABCDEFGH
EFGH
但是运行结果是:
ABCDEFGH
FGH
我不知道为甚末,
帮忙解答一下
谢谢!

可能会出现ABCDEFGH与EFGH,也可能会程序出错……
至于为什么会有ABCDEFGH与EFGH
while(*s1)
s1++; //这两行将s1指向了ABCD后面那个\0
while(*s1++=*s2++); //这一句将ABCDR后面的空间COPY进了s2的内容,即EFGH,同时将s1指向ABCDEFGH后面的\0(后面FGH\0存放的空间是未分配的,有可能出错),而s2指向EFGH后面的\0
然后因为ps1与ps2是分别指向A与E
所以最终ps1指向"ABCDEFGH",而ps2指向"EFGH"

这个程序太可怕了……怎么能这么用指针。
你操作了不安全的内存位置。

while(*s1)
s1++;
执行完,s1指向不可预料的位置,无意义

你事先没有开辟内存单元,使得s1++后指向了未知的内存单元.就可能占用其他的内存单元,造成数据丢失.

我不知道楼主的程序如果让while停下来,更不用说有结果了,而且如同大家所讲,超过申请的内存单元,将是非法操作

楼上的请问何种编译器可以让此程序不出错,while停下来,或许只是我们一厢情愿。

我没看过这样写程序的,有点迷糊