菜鸟级C++问题

下面的代码中,函数f内的那个for循环for(;*s1=*s2;s1++,s2++);为什么不会形成死循环?我运行过了,这段代码是没有问题的(课本上的),作用是把两个字符串连接起来。就是不明白那个for循环为什么会在适当的时候终止,而不是一直循环下去。高手指点,不胜感谢!

#include<iostream>
using namespace std;

void f(char *,const char *);

int main()
{
char string1[80];
char string2[80];

cout<<"Enter two strings: ";
cin>>string1>>string2;
f(string1,string2);
cout<<string1<<endl;

return 0;
}

void f(char *s1,const char *s2)
{
while(*s1!='\0')
++s1;

for(;*s1=*s2;s1++,s2++)
;
}

第1个回答  2010-11-30
来打酱油
第2个回答  2010-11-30
while(*s1!='\0')
++s1;
\\上面循环的结果是把s1指针移到string1的最后。由于string1的定义长度为80,实际长度假设为30,则后面没用的的单元的值全是'/0'
for(;*s1=*s2;s1++,s2++)
//而这个循环没初始化,结束条件是(;*s1=*s2,也就是s2指针要移动string2的实际长度的最后,也就是'/0'才结束,刚好就能把string2接到string1的后面。也就是在整个循环过程中,s1的值始终是'\0',而s2只有到string2的实际长度最后才会等于'\0'
;
}本回答被提问者采纳
第3个回答  2010-11-30
void f(char *s1,const char *s2)
{
while(*s1!='\0')
++s1;//将s1指向字符串最后一位即‘\0’,字符串
for(;*s1=*s2;s1++,s2++)
;//逐个把字符串s2的字符添加到s1后,由于s2最后一个字符为字符串结尾‘\0’,为0跳出循环
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网