实现库函数strcpy
#include<iostream>
#include<assert.h>
using namespace std;
char*strcpy1(char*strDest,const char*strSrc)
{
assert((strDest!=NULL) && (strSrc!=NULL));
char*address=strDest;
while((*strDest++=*strSrc++)!='\0')
{
cout<<"1"<<endl;
}
cout<<*strDest<
return address;
}
int main()
{
char *src="ab";
char dest[10];
char *address=NULL;
address=strcpy1(dest,src);
cout<<*address<<endl;
return 0;
}
对玫红色部分进行解析:(以下都是在VC++6.0下调试的结果)
起始状态:在执行[1]前,strDest:ox003b2f20 ,strSrc: ox00430290,*strSrc='a',*strDest中没有值
while 执行第1次:在执行完[1],跳到[2]后,*strDest='a',然后比较*strSrc是否等于'\0',不管等不等于'\0',strDest和strSrc都执行++。即while执行完后,strDest=ox003b2f21,strSrc=ox00430291。即此时*strDest中没有值,*strSrc的值为'b'。
while 执行第2次:在执行完[1],跳到[2]后,*strDest='b',然后比较*strSrc是否等于'\0',不管等不等于'\0',strDest和strSrc都执行++。即while执行完后,strDest=ox003b2f22,strSrc=ox00430292。即此时*strDest中没有值,*strSrc的值为'\0'。
while 执行第3次:在执行完[1],跳到[2]后,*strDest='\0',然后比较*strSrc是否等于'\0',不管等不等于'\0',strDest和strSrc都执行++。即while执行完后,strDest=ox003b2f23,strSrc=ox00430293。即此时*strDest中没有值,*strSrc的值为'0'。
总结:该while循环条件的执行过程是:先赋值,再比较是不是等于'\0',最后执行++。
#include<iostream>
#include<assert.h>
using namespace std;
char*strcpy1(char*strDest,const char*strSrc)
{
assert((strDest!=NULL) && (strSrc!=NULL));
char*address=strDest;
while((*strDest++=*strSrc++)!='\0')
{
cout<<"1"<<endl;
}
cout<<*strDest<
return address;
}
int main()
{
char *src="ab";
char dest[10];
char *address=NULL;
address=strcpy1(dest,src);
cout<<*address<<endl;
return 0;
}
对玫红色部分进行解析:(以下都是在VC++6.0下调试的结果)
起始状态:在执行[1]前,strDest:ox003b2f20 ,strSrc: ox00430290,*strSrc='a',*strDest中没有值
while 执行第1次:在执行完[1],跳到[2]后,*strDest='a',然后比较*strSrc是否等于'\0',不管等不等于'\0',strDest和strSrc都执行++。即while执行完后,strDest=ox003b2f21,strSrc=ox00430291。即此时*strDest中没有值,*strSrc的值为'b'。
while 执行第2次:在执行完[1],跳到[2]后,*strDest='b',然后比较*strSrc是否等于'\0',不管等不等于'\0',strDest和strSrc都执行++。即while执行完后,strDest=ox003b2f22,strSrc=ox00430292。即此时*strDest中没有值,*strSrc的值为'\0'。
while 执行第3次:在执行完[1],跳到[2]后,*strDest='\0',然后比较*strSrc是否等于'\0',不管等不等于'\0',strDest和strSrc都执行++。即while执行完后,strDest=ox003b2f23,strSrc=ox00430293。即此时*strDest中没有值,*strSrc的值为'0'。
总结:该while循环条件的执行过程是:先赋值,再比较是不是等于'\0',最后执行++。