写strcpy函数,高手进!
#include <iostream.h>
char *strcpy(char *strDest, const char *strSrc)
{
if ( strDest == NULL || strSrc == NULL)//这个语句有什么用?举个列子,详细点。
return NULL ;
if ( strDest == strSrc)//这个语句有什么用?举个列子,详细点。return strDest ;
char *tempptr = strDest ;
while( (*strDest++=*strSrc++) !='\0');
return tempptr ;
}
void main()
{
char st1[100];
char st2[100];
cin>>st1>>st2;
cout<<strcpy(st1,st2)<<endl;
}
[解决办法]
不能对空指针进行读写,第一个判断就是为了保证语句while( (*strDest++=*strSrc++) !='\0')能正常执行。如果没有这个判断,则 strcpy(NULL, NULL) 会产生异常。
第二个判断是避免无意义的操作,如果传入的strSrc与strDest相等,则说明这两个指针指向的是同一个内存区,所以无需执行下边的while语句。例如,stcpy(st1, st1)。
[解决办法]
if ( strDest == NULL || strSrc == NULL)//这个语句有什么用?举个列子,详细点。
return NULL ;
这句就是加入你调用函数时 两个实参全为空,就会返回NULL,就比如如下调用
char str1=‘’;
char str2=‘’;
strcpy(st1,st2);
就会返回NULL;
if ( strDest == strSrc)//这个语句有什么用?举个列子strDest return strDest ;
这句就是两个实参相同时,就不需要拷贝,所以在之后返回strDest;
[解决办法]