while(Arr1[i++]!='\0')
第一次进循环的时候
你执行完这个语句的时候 i已经+1了
所以下面的语句i已经是1 即B
不懂可以继续追问
完善了下:
strcat 是连接字符串 的
strcat(Arr1,Arr2); 执行完后Arr1变成了ABLMNP
while(Arr1[i++]!='\0') 第一次进循环后i变成了1.
Arr2[i]=Arr1[i]; printf("%s\n",Arr2); 这里从i=1 开始 即先把B给M 然后L。。。 逐个替代 就是这样
/*
ABLMNP
Press any key to continue
*/
#include
#include
int main() {
char Arr1[80] = "AB",Arr2[80] = "LMNP";
int i = 0;
strcat(Arr1,Arr2);
while(Arr2[i] = Arr1[i]) ++i;
printf("%s\n",Arr2);
return 0;
}
/*
while(Arr1[i++]!='\0') // 这里执行i++
Arr2[i]=Arr1[i]; // 这里的i已经变了,现在明白了吧?
*/
注意:这一句while(Arr1[i++]!='\0')中的i++是在执行完Arr1[i]!='\0'后就执行了,所以在进入while()的“循环体”之前i就等于1了。想要达到你的目的要改写如下:
while(Arr1[i]!='\0')
Arr2[i]=Arr1[i++];
你试试……
while(Arr1[i++]!='\0')
Arr2[i]=Arr1[i];
我解释一下这两行代码:
它们等价于
while(Arr1[i]!='\0'){
i=i+1;
Arr2[i]=Arr1[i];
}
关键要理解i++的意思,i++是后加操作,即先取i的值,然后i再加1
strcat(Arr1,Arr2);之后 arr1:ABLMNP arr2:LMNP.
arr2[1]=arr1[1]=B;
i++为先用后加,进入循环时 i就为1了,所以arr1处理第1个元素(arr1[0]),其它元素都赋给了arr2.
因为while里执行判断结来后才执行循环语句因此三个动作判断是否结束,i加一,赋值语句,所以从B开始,一直到字符串结束符全拷贝过来了,你应该庆幸你的代码运行正常,否则没有拷结束符的话才是大麻烦