请问下面的一段代码中,strcopy函数是怎么把s2拷贝给s1的阿?我怎么看不出来阿,还有那段while ((*s1++=*s2++)!='\0');是做什么用的阿?
-----------------------------------
#include <iostream>
#include <stdlib.h>
using namespace std;char strcopy(char *s1,const char *s2)
{
char *s=s1;
while ((*s1++=*s2++)!='\0');
return 0;
}
//////////////////////////////////////////////////////////
//main函数
//////////////////////////////////////////////////////////
int main()
{
const char ver[]="Version 5.01";
char cver[25];
strcopy(cver,ver);
cout << cver << endl; system("PAUSE");
return 0;

解决方案 »

  1.   

    while ((*s1++=*s2++)!='\0');  '\0' shi zi chuan de jie shu fu hao
    while xun huan ((*s1++=*s2++)shi xian fu zhi 
      

  2.   

    (*s1++=*s2++)
    把s2当前所指的字符赋值给s1当前的地址,同时返回s2所指的字符,如果为\0,那就是s2结束了
      

  3.   

    我来给你翻译一下while ((*s1++=*s2++)!='\0');
    do
    {
       *s1 = *s2;
       s1++;
       s2++;
    }while(*s1 != '\0')   //当没有到字符串的结尾时  你的char strcopy(char *s1,const char *s2)函数有错误
    应该是char* strcopy(char *s1,const char *s2)
    并且返回值应该改为
    return s;
      

  4.   

    可是while 后面不是跟的是条件吗?((*s1++=*s2++)!='\0')算是什么条件阿?
      

  5.   

    runall(龙行天下)大哥,
    为什么要用char* strcopy(char *s1,const char *s2)
    而不用char strcopy(char *s1,const char *s2)呢?可以告诉我吗?
      

  6.   

    看一下运算符的 优先级,* > ++ 
    故(*s1++=*s2++)中先是s2中的值赋值给vs1,再指针后移一位,都指向下一个字符,
    而赋值式的 值就是等号左边或友边的 值,故(*s1++=*s2++)的 值就是
    *vs1或*vs2,
    当这两个值都不为‘\0'(表示字符串结束标记)时,while一直执行下去
    他的等价代码正如 runall(龙行天下) 所说
      

  7.   

    返回值无论是 char* 还是 char 都无关紧要,甚至可以不用返回值
    楼主的程序会直接把字符串 s1 的 32 位指针指向字符串 s2 的